使用HibernateValidator 后端验证
-
pom文件引入
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency>
-
配置
<!--hibernate后端验证 start--> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" p:providerClass="org.hibernate.validator.HibernateValidator" p:validationMessageSource-ref="messageSource"/> //指定message提示文件 <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:cacheSeconds="60" p:fileEncodings="UTF-8" p:defaultEncoding="UTF-8" p:basename="classpath:erroMsg"/> <mvc:annotation-driven validator="validator"/> <!-- hibernate 后端验证end-->
-
实体类注解
/** 用户id */ @NotBlank private String id; /** 用户工号 */ @NotNull(message = "{user.num.notNull}")//读取配置文件中的提示 // @NotNull(message = "用户工号不得为空") 直接使用不使用配置文件,不推荐后期不好更改 @Range(min = 1000, max = 100000, message = "{user.num.range}")
-
controller
//验证注解 public String userAdd(@Valid User user, BindingResult result) { Map<String, Object> map = new HashMap<>(); if (result.hasErrors()) { jsonObject.put("result", false); //获取所有错误 List<FieldError> fieldErrors = result.getFieldErrors(); fieldErrors.forEach( fieldError -> { System.out.println(fieldError.getField() + "-----" + fieldError.getDefaultMessage()); map.put(fieldError.getField(), fieldError.getDefaultMessage()); }); jsonObject.put("message", map); } else { userService.userAdd(user); jsonObject.put("result", true); } return jsonObject.toJSONString(); }
-
实践出现乱码文件
- 已经配置fileEncodings="UTF-8"而且在不配置HibernateValidator之前由于配置了StringHttpMessageConverter没有出现乱码问题
- 解决方式: 将两者结合
<mvc:annotation-driven validator="validator"> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven>