1

在 Java(+ Spring Boot)项目中,有一个使用javax.validation如下所示的符号:

@NotEmpty(message = "validation.product.notEmpty")
private String product;

@NotEmpty(message = "validation.username.password")
private String password;

我看了一下它们的用法,但有些地方我无法理解:

1.是否有特殊用途,例如条件消息显示validation.username.password?例如,如果用户名字段为空,则显示此消息?还是和领域完全一样product

2.我搜索项目,但找不到validation.product.notEmptyvalidation.username.password。那么,它们是如何工作的呢?我认为这些消息应该有一个定义,但是我没有找到,它来自默认消息javax.validation吗?

4

1 回答 1

4
  1. @EmailRegex 和@Email 有什么区别?是否还需要将@NotEmpty 与这些@EmailRegex 或@Email 注释一起使用?

@Email不会为空字符串抛出错误。因此@NotEmpty,如果您始终需要电子邮件,则需要确保此字符串不为空。

@Email将考虑表单中的所有内容blabla@blabla.blabla。如果您想进一步约束,您可以使用@EmailRegex它,以便您仅blabla@blabla.eu通过定义自己的正则表达式来允许。

@EmailRegex似乎没有包含在 hibernate 注释或 spring 注释中。所以它要么是从其他地方导入的自定义注释,要么只是应用程序的自定义注释。检查代码以查看它的实际行为,但从它的名称来看,我想它的行为与我上面解释的一样。

  1. 我搜索项目,但找不到validation.product.notEmpty 或validation.username.password。那么,它们是如何工作的呢?我认为这些消息应该有一个定义,但是我没有发现,它来自 javax.validation 的默认消息吗?

它应该与{....}一样@NotEmpty(message = "{validation.username.password}") private String password;。在这种情况下,Spring 会自动从属性文件中读取属性并应用属性的值validation.username.password。如果它不存在,则转到 application.properties 或 application.yaml 并添加该属性。

关于这最后一个的更多注释。我在后端-前端应用程序中看到了一些奇怪的案例,这可能就是您的情况。

@NotEmpty(message = "validation.username.password")

验证失败时此处抛出的实际消息是validation.username.password. 我见过前端然后读取该消息并将值绑定到该消息的情况。我已经看到当前端支持多种语言并每次为每种语言绑定另一个值时使用它。这可以解释为什么您的应用程序中没有 { } 或这样的属性。

 @NotEmpty(message = "{validation.username.password}")

validation.username.password= password can not be empty 当验证失败时,具有现有属性的消息password can not be empty将被传递。

于 2021-08-19T08:11:42.517 回答