版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Geralt3/article/details/75267175
今天在使用JSR-303 validation进行校验时出现了标题中的相关问题
po类相关代码:
@Size(min=1,max=30,message="{items.name.length.error}")
private String name;
@NotNull(message="{items.createtime.isNUll}")
private Date createtime;
springmvc.xml:
<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
<!-- 校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:CustomValidationMessages</value>
</list>
</property>
<property name="fileEncodings" value="utf-8" />
<property name="cacheSeconds" value="120" />
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
<property name="validationMessageSource" ref="messageSource" />
</bean>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:CustomValidationMessages</value>
</list>
</property>
<property name="fileEncodings" value="utf-8" />
<property name="cacheSeconds" value="120" />
</bean>
controller.java:
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model, HttpServletRequest request, Integer id, @Validated ItemsCustom itemsCustom, BindingResult bindingResult) throws Exception {
if (bindingResult.hasErrors()) {
List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError objectError : allErrors) {
System.out.println(objectError.getDefaultMessage());
}
model.addAttribute("allErrors", allErrors);
model.addAttribute("items", itemsCustom);
return "items/editItems";
}
CustomValidationMessage.properties:
items.name.length.error=请输入1到30个字符的商品名称
items.createtime.isNULL=请输入商品的生产日期
第一个问题很明显是properties文件中的信息未正确加载导致的。经检查发现po类中非空校验的代号为items.createtime.isNUll,properties文件中为items.createtime.isNULL,二者不匹配导致了错误。
另附springmvc加载配置properties文件的几种方式以供学习http://blog.csdn.net/chinadim/article/details/40621671
第二个问题是由于编码问题导致的
经查询将springmvc.xml文件中的
<property name="fileEncodings" value="utf-8" />
更改为:
<property name="defaultEncoding" value="utf-8" />
或者利用jdk根目录bin文件夹下的native2ascii.exe文件将properties文件转为UTF-8也可解决。