springmvc使用@Valid和@ControllerAdvise实现请求参数校验统一异常处理

2021-01-16 22:11

阅读:638

标签:message   ffffff   字符   err   dex   binder   container   正则表达   ext   

@

目录

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

    2.代码实现
    新建model其中两个字段增加注解

    @NotBlank(message = "用户名称不能为空")
        @ApiModelProperty(value = "用户名称")
        private String userName;
    
        @Email(message = "请填写正确的邮箱")
        @ApiModelProperty(value = "邮箱")
        private String email;
    

    Controller
    在需要校验的model前增加@Valid 注解

    ?

     @RequestMapping(method = RequestMethod.POST)
    	    public String test(@Valid @RequestBody TestEntity model) {
    	        try {
    	            testEntityService.insert(model);
    	            return "";
    	        }catch (Exception e){
    	            return "";
    	        }
    	    }
    

    统一异常处理

    通过ControllerAdvice和@ExceptionHandler注解,在Controller中发生的异常错误就到指定异常处理方法进行处理。

    @ControllerAdvice
    	public class DoControllerAdvice {
    	    private static final Logger logger = LoggerFactory.getLogger(DoControllerAdvice.class);
    	
    	    /**
    	     * @param e
    	     * @return d1.framework.webapi.http.Result
    	     * @Description 必填校验异常处理
    	     * @Date 2019-07-30
    	     */
    	    @ResponseBody
    	    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    	    public Result errorHandler(MethodArgumentNotValidException e) {
    	        String errorMsg = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
    	        logger.error("未处理异常", errorMsg);
    	        return ResultUtil.fail(errorMsg);
    	    }
    	}
    

    技术图片看一下MethodArgumentNotValidException这个类的源码 ,它继承了Exception,包含参数和错误。BindError参数实现了error。 统一异常处理类实现完成。

    springmvc使用@Valid和@ControllerAdvise实现请求参数校验统一异常处理

    标签:message   ffffff   字符   err   dex   binder   container   正则表达   ext   

    原文地址:https://www.cnblogs.com/Bczc/p/12922540.html


    评论


    亲,登录后才可以留言!