springboot 分组校验和顺序校验

public interface GroupA {}
public interface GroupB {}
public interface GroupC {}
@GroupSequence({GroupA.class,GroupB.class,GroupC.class})
public interface Group {}
public interface LoginReg {}
public interface RegisterReg {}
// 定义了6个接口,只是空接口,其中LoginReg和RegisterReg用于分组,GroupABC用于排序,指定了ABC为Group的序列

bean代码省略set/get方法

/**
 * 接受登录与注册页面表单vo
 * @author yanfei.li
 * @date 2017年3月3日
 */
public class UserInfoVO implements Serializable{
 
	private static final long serialVersionUID = 1L;
	
	@NotBlank(message="登录名不能为空",groups={GroupA.class,LoginReg.class})
	@Length(min=6,max=32,message="长度在6到32之间",groups={GroupB.class,LoginReg.class})
	@Pattern(regexp="[a-zA-Z]{6,32}",message="必须是字母",groups={GroupC.class,LoginReg.class})
	private String loginName;
	
	@NotBlank(message="username不为空",groups={RegisterReg.class})
	private String userName;
}

controller代码

	@RequestMapping("/login")
	@ResponseBody
	public ModelAndView login(HttpServletRequest request,@Valid UserInfoVO info,BindingResult br) 	{
		if(br.hasErrors()) {
			List<FieldError> errors = br.getFieldErrors();
			for (FieldError fieldError : errors) {
				System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
			}
		}	
}

如果使用上面的controller,传递一个loginName=44的参数的话,则会输出 两个错误信息
loginName:长度在6到32之间
loginName:必须是字母

顺序校验:

代码做如下修改,就只会输出loginName:长度在6到32之间,一个错误信息
	@RequestMapping("/login")
	@ResponseBody
	public ModelAndView login(HttpServletRequest request,@Validated({Group.class}) UserInfoVO info,BindingResult br) {
		if(br.hasErrors()) {
			List<FieldError> errors = br.getFieldErrors();
			for (FieldError fieldError : errors) {
				System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
			}
		}

分组校验

只校验loginName属性
@RequestMapping("/login")
	@ResponseBody
	public ModelAndView login(HttpServletRequest request,@Validated({LoginReg.class}) UserInfoVO info,BindingResult br) {
		if(br.hasErrors()) {
			List<FieldError> errors = br.getFieldErrors();
			for (FieldError fieldError : errors) {
				System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
			}
		}

自定义校验

自定义枚举值校验:https://www.cnblogs.com/wjqhuaxia/p/12153053.html

参考https://blog.csdn.net/li_yan_fei/article/details/60584409

你可能感兴趣的:(springcloud)