zoukankan      html  css  js  c++  java
  • Spring Boot 数据校验@Validated+统一异常处理

    一、实体类添加注解

    例如:@NotBlank(message = "手机号不能为空")

    注解功能说明如下:

    限制说明
    @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格式

    二、controller添加注解

    在需要校验的实体对象添加@Validated注解

    三、添加RestController统一异常处理handler

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.http.converter.HttpMessageConversionException;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.FieldError;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;

    import java.util.List;

    /**
    * 校验统一处理异常
    * 如果校验不通过,就在异常中处理,统一输出格式
    * created by chl on 2020/6/11
    **/
    @Slf4j
    @RestControllerAdvice
    public class RequestValidateExceptionHandle {

    /**
    * 校验错误拦截处理
    *
    * @param exception 错误信息集合
    * @return 错误信息
    */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Message validationBodyException(MethodArgumentNotValidException exception) {
    BindingResult result = exception.getBindingResult();
    String message = "";
    if (result.hasErrors()) {
    List<ObjectError> errors = result.getAllErrors();
    if (errors != null) {
    errors.forEach(p -> {
    FieldError fieldError = (FieldError) p;
    log.error("Data check failure : object{" + fieldError.getObjectName() + "},field{" + fieldError.getField() +
    "},errorMessage{" + fieldError.getDefaultMessage() + "}");

    });
    if (errors.size() > 0) {
    FieldError fieldError = (FieldError) errors.get(0);
    message = fieldError.getDefaultMessage();
    }
    }
    }
    return Message.fail("".equals(message) ? "请填写正确信息" : message);
    }

    /**
    * 参数类型转换错误
    *
    * @param exception 错误
    * @return 错误信息
    */
    @ExceptionHandler(HttpMessageConversionException.class)
    public Message parameterTypeException(HttpMessageConversionException exception) {
    log.error(exception.getCause().getLocalizedMessage());
    return Message.fail("类型转换错误");

    }

    }
  • 相关阅读:
    关于控制地址控件的代码
    获取某个设计项列表界面上查询框中的值的代码
    js中不同值的替换
    js截取字符串方法实例
    抛异常语句的种类及区别
    从获取结果中去除重复记录
    泛微E8升级E9代码修改
    中控考勤数据转换
    WEB打印,分页首行自动带出栏目标题
    VS附加进程调试IIS网站
  • 原文地址:https://www.cnblogs.com/lovechengyu/p/13094198.html
Copyright © 2011-2022 走看看