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

@

目录

    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);
    }
    }

    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190731101518152.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MjUxOTEz,size_16,color_FFFFFF,t_70)看一下MethodArgumentNotValidException这个类的源码 ,它继承了Exception,包含参数和错误。BindError参数实现了error。 统一异常处理类实现完成。

    posted @ 2020-05-20 11:22  小博Mark1  阅读(912)  评论(0)    收藏  举报