在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
的条件消息显示?例如,如果username字段为空,那么显示此消息?还是和product
场完全一样?
2。我搜索项目,但没有找到validation.product.notEmpty
或validation.username.password
。那么,它们是如何工作的呢?我认为这些消息应该有一个定义,但是我没有找到,它是来自javax.validation
的默认消息吗?
- @EmailRegex和@Email的区别是什么?有吗?任何需要也使用@NotEmpty与这些@EmailRegex或@Email注释吗?
@Email
不会为空字符串抛出错误。所以你需要@NotEmpty
来确保这个字符串不是空的,如果你总是需要一个电子邮件在那里。
@Email
将认为形式为blabla@blabla.blabla
的所有内容都有效。如果你想进一步限制这一点,你可以使用@EmailRegex
,这样你就可以通过定义自己的正则表达式来只允许blabla@blabla.eu
。
@EmailRegex
似乎没有包含在hibernate注释或spring注释中。它要么是从其他地方导入的自定义注释要么只是应用程序的自定义注释。检查代码,看看它的实际行为,但从它的名字,我认为它的行为,我已经解释过了。
- 我搜索项目,但无法找到validation.product.notEmpty或validation.username.password。那么,它们是如何工作的呢?我想是这样的这些信息应该有一个定义,但我没有找到,是吗它来自javax.validation?
应该与{....}就像@NotEmpty(message = "{validation.username.password}") private String password;
。在这种情况下,Spring将自动从属性文件中读取属性,并应用属性validation.username.password
的值。如果它不存在,那么转到其中一个应用程序。属性或应用程序。
关于最后一条的一些注意事项。我在后端前端应用中看到过一些奇怪的案例,这可能是你的案例。
@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
。