我在Spring Boot项目中使用Hibernate验证。虽然我能够将ValidationMessage.properties
文件中的消息以及大括号中的参数读作{min}
,{max}
:
Size.accountRequestBean.firmName=size should be between {min} and {max}
ValidationMessages.properties
Size.accountRequestBean.firmName={0} should be between {1} and {2}
但是当我使用Size.accountRequestBean.firmName={0} should be between {1} and {2}
时,显示的消息{0}
应该在{1}
和{2}
之间:
预期:大小应在2到30之间。
DemoApplication.java
@SpringBootApplication
public class DemoApplication extends WebMvcConfigurerAdapter{
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Bean.java
public class Bean {
@Size(min=2, max=30,message="{Size.accountRequestBean.firmName}")
private String firmName;
}
我正在使用的验证依赖项:
<!-- Hibernate Validator -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
那么请说明我做错了什么?
答案 0 :(得分:0)
将ValidationMessage.properties
文件重命名为messages.properties
(默认情况下,Spring希望在resources
文件夹下找到它)并将以下属性放入其中:
bean.hasErrors=Please fix the following errors
bean.firmName=Firm Name
Size.bean.firmName={0} should be between {2} and {1}
请注意,此处的优先顺序为: code.objectName.fieldName
。 objectName
必须与您的班级名称相同,因此accountRequestBean
只放bean
(作为您的对象Bean.java
)。
然后,您可以省略message
注释中的@Size
键。当您使用messages.properties
文件时,Spring Boot会自动获取其消息:
public class Bean {
@Size(min = 2, max = 30)
private String firmName;
// getter, setter
}
确保在控制器中使用@Valid
注释以使用Bean
验证,例如:
@RequestMapping(value = "/doBean", method = RequestMethod.POST)
public String doBean (@Valid Bean checkoutCommand, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}
return "success";
}
你应该得到这样的东西:
答案 1 :(得分:0)
在我的项目中,问题出在以下设置:
var messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setUseCodeAsDefaultMessage(true);
之后
setUseCodeAsDefaultMessage(false)
一切正常