如何在Spring中设置@NotEmpty注解消息?

How to set @NotEmpty annotation messages in Spring?

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

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

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

我看了一下它们的用法,但是有些地方我没看懂:

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

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

  1. What is the difference between @EmailRegex and @Email? And is there any need to also use @NotEmpty with these @EmailRegex or @Email annotations?

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

@Email 将认为 blabla@blabla.blabla 形式的所有内容都是有效的。如果您想进一步限制这一点,您可以使用 @EmailRegex 以便通过定义您自己的正则表达式只允许 blabla@blabla.eu

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

  1. I search the project, but could not find validation.product.notEmpty or validation.username.password. So, how do they work? I think there should be a definition for these messages, but as I did not find, is it come from default messages of 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 被传递。