spring 参数校验validator
加入jar包
springmvc.xml配置
我使用ReloadableResourceBundleMessageSource总是报错于是我选用ResourceBundleMessageSource一切正常
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 扫描组件 -->
<context:component-scan base-package="com.xieli.liu.controller"/>
<!--注解适配器和映射器-->
<mvc:annotation-driven conversion-service="conversionService" validator="validator">
</mvc:annotation-driven>
<!-- 视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
<!--自定义参数绑定-->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.xieli.liu.controller.converter.DateConverter"/>
</list>
</property>
</bean>
<!-- 校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- hibernate校验器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
<!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如不指定,则默认classpath下的validationMessage.properties文件 -->
<property name="validationMessageSource" ref="messageSource"></property>
</bean>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 资源文件名 -->
<property name="basenames">
<list>
<!-- 配置错误信息文件 CustomValidationMessages.properties-->
<value>config/springmvc/validationMessage</value>
</list>
</property>
<!-- 解决中文乱码 -->
<property name="defaultEncoding" value="utf-8"></property>
<!-- 资源文件缓存时间 -->
<property name="cacheSeconds" value="120"></property>
</bean>
</beans>
配置pojo
package com.xieli.liu.pojo;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
public class UserInfo {
@NotNull(message = "{UserInfo.userId.idNull.error}")
private Integer userId;
private Integer groupId;
@Size(min = 1,max = 10,message="{UserInfo.name.length.error}")
private String userName;
private String nickName;
private String userCode;
private String userPwd;
private String userType;
private String userState;
private String isDelete;
private Integer createBy;
private Date createTime;
private Integer udateBy;
private Date updateTime;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getGroupId() {
return groupId;
}
public void setGroupId(Integer groupId) {
this.groupId = groupId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName == null ? null : userName.trim();
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName == null ? null : nickName.trim();
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode == null ? null : userCode.trim();
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd == null ? null : userPwd.trim();
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType == null ? null : userType.trim();
}
public String getUserState() {
return userState;
}
public void setUserState(String userState) {
this.userState = userState == null ? null : userState.trim();
}
public String getIsDelete() {
return isDelete;
}
public void setIsDelete(String isDelete) {
this.isDelete = isDelete == null ? null : isDelete.trim();
}
public Integer getCreateBy() {
return createBy;
}
public void setCreateBy(Integer createBy) {
this.createBy = createBy;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Integer getUdateBy() {
return udateBy;
}
public void setUdateBy(Integer udateBy) {
this.udateBy = udateBy;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
配置错误信息文件validationMessage.properties
UserInfo.name.length.error=请输入1到10个字符
UserInfo.userId.idNull.error=ID不能为空
配置controller
@RequestMapping("/saveUser")
public String saveUser(HttpServletRequest request, @Validated UserInfo userInfo, BindingResult bindingResult) throws Exception {
if(bindingResult.hasErrors()){
List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError objectError: allErrors) {
System.out.println(objectError.getDefaultMessage());
}
}
return "rediret:queryuser.action";
}
输入http://localhost:8080/ssm/saveUser.action?userName=mmmmmmmmmmmmmmmmmmmmmmmmmm
校验分组
编辑分组接口
package com.xieli.liu.validation;
/**
* Created by Administrator on 2019-12-02.
*/
public interface UserInfoGroup1 {
}
package com.xieli.liu.validation;
/**
* Created by Administrator on 2019-12-02.
*/
public interface UserInfoGroup2 {
}
为属性进行分组
package com.xieli.liu.pojo;
import com.xieli.liu.validation.UserInfoGroup1;
import com.xieli.liu.validation.UserInfoGroup2;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
public class UserInfo {
@NotNull(message = "{UserInfo.userId.idNull.error}",groups = {UserInfoGroup2.class})
private Integer userId;
private Integer groupId;
@Size(min = 1,max = 10,message="{UserInfo.name.length.error}",groups = {UserInfoGroup1.class})
private String userName;
private String nickName;
private String userCode;
private String userPwd;
private String userType;
private String userState;
private String isDelete;
private Integer createBy;
private Date createTime;
private Integer udateBy;
private Date updateTime;
get/set省略
}
controller层
1.测试UserInfoGroup1
@RequestMapping("/saveUser")
public String saveUser(HttpServletRequest request, @Validated(value = {UserInfoGroup1.class}) UserInfo userInfo, BindingResult bindingResult) throws Exception {
if(bindingResult.hasErrors()){
List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError objectError: allErrors) {
System.out.println(objectError.getDefaultMessage());
}
}
return "rediret:queryuser.action";
}
访问http://localhost:8080/ssm/user/saveUser.action?userName=mmmmmmmmmmmmmmmmmm
只打印出第一个分组的校验信息
2.测试UserInfoGroup2
@RequestMapping("/saveUser")
public String saveUser(HttpServletRequest request, @Validated(value = {UserInfoGroup2.class}) UserInfo userInfo, BindingResult bindingResult) throws Exception {
if(bindingResult.hasErrors()){
List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError objectError: allErrors) {
System.out.println(objectError.getDefaultMessage());
}
}
return "rediret:queryuser.action";
}
访问http://localhost:8080/ssm/user/saveUser.action?userName=mmmmmmmmmmmmmmmmmm
只打印出第二个分组的校验信息