@Validated注解校验

前后端交互中字段校验必不可少,当对象中有大量变量该如何校验?使用@validated注解是个不错的选择。

@Valid是使用hibernate validation的时候使用;而@Validated 是只用spring  Validator 校验机制使用。

下面介绍@Validated注解校验的使用

一、添加校验信息

在需要校验的对象上添加校验类别及错误提示信息即可


public class ChecktemplateSupport {	
	
    private String id;

    @NotBlank(message = "检查模板名称不能为空")
    private String strname;
    
    @NotNull(message = "检查模板类型不能为空")
    private Integer checktype;

    private Integer nenabled;
    
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
    private Date dtcreatetime;

    private Integer strcreateauthor;

    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
    private Date dtupdatetime;

    private Integer strupdateauthor;

    private Integer tempversion;

    private Integer nstatus;
    
    private Integer userid;
    
    @Valid
    private List<ChecktemplateProjectSupport> project;
}

常见的校验类别注解见下表:

限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

二、接口中引入校验、绑定BindingResult

public CommonResponse<Checktemplate> addCheckTemplate(@Validated @RequestBody ChecktemplateSupport checktemplateSupport, BindingResult bindingResult,HttpSession httpSession) {
    ......
}

三、处理校验结果

public static String handleBindException(BindingResult ex){
		 // ex.getFieldError():随机返回一个对象属性的异常信息。如果要一次性返回所有对象属性异常信息,则调用ex.getAllErrors()
		 List<ObjectError> errors = ex.getAllErrors(); 
		 if(errors != null && errors.size() > 0){
			 StringBuilder sb = new StringBuilder();
			 for (ObjectError err : errors) {  				 
				    sb.append(err.getDefaultMessage()).append("; ");  
			 }  
            return  sb.toString();
            
        }
		 return null;
	}

四、问题及解决

(1)对象中的对象需要校验,添加@Validated,仍旧无法校验

目前不知道原因,只知道解决方案,有知道的大神求回复。解决方案,将@Validated替换成@Valid就可以了

(2)Integer类型定义成NotEmpty报错

原因:@NotEmpty一般适用于集合类、String、Array的校验;@NotNull可适用于任意对象。

Integer使用@NotNull校验就行

(3)String类型字段,null能捕获校验,但“”空字符串未捕获校验

被自己蠢哭。原因:使用了@NotEmpty只校验了null,使用@NotBlank即可


参考文献:https://blog.csdn.net/u012373815/article/details/72049796

猜你喜欢

转载自blog.csdn.net/sinat_27992659/article/details/80865687
今日推荐