zoukankan      html  css  js  c++  java
  • 使用HibernateValidator优雅的验证参数

    第一步 添加maven依赖

      1、添加 Hibernate-Validator 依赖,如果使用了springboot,则不需要引用任何依赖,因为spring-boot-starter-web包中已经包含了Hibernate-Validator 依赖

        <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>6.0.18.Final</version>
            </dependency>

      在Vo属性上加入相应的注解 使用lombok 的@Data注解自动生成gettter/setter方法

      注意:String 使用@NotBlank Integer类型使用@NotNull  其他类型还暂时没用到

    第二步建立对应的Vo

    @Data
    @NoArgsConstructor
    @AllArgsConstructorpublic class User {
        @NotBlank(message = "姓名不能为空")
        private String name;
      @NotNUll(message="年龄不能为空")
    private Integer age; }

    第三部 使用

    1、如果是Post方法,需在@RequestBody 的前面或者后面加上@Valid注解

    /**
         * 测试校验框架返回结果格式
         */
        @PostMapping(value = "/validator")
        public String testValidator(@RequestBody @Valid User user){
            return "校验成功...";
        }

    2、get方法,需要在类上加入注解@Validated,然后再加入其它对应注解

    @RestController
    @RequestMapping("/user")
    @Validated
    public class UserController {
    
        /**
         * 测试校验框架返回结果格式
         */
        @GetMapping(value = "/validator2")
        public String testValidator2(@NotBlank(message = "姓名不能为空") String name){
            return "校验成功...";
        }
    
    }

    第四步 定制校验的返回信息

    利于spring中的@ControllerAdvice定制优雅的返回信息,spring自带的全局异常处理机制

    /**
     * @Description: 全局的异常处理
     * @Author: chenmingjian
     * @Date: 18-10-31 19:00
     */
    @ControllerAdvice
    @Slf4j
    public class GlobalExceptionHandler {
    
    /**
    * 参数校验统一异常处理
    */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ResultEntity handleBindException(MethodArgumentNotValidException ex) {
    FieldError fieldError = ex.getBindingResult().getFieldError();
    log.warn("参数校验异常:{}({})", fieldError.getDefaultMessage(),fieldError.getField());
    return ResultEntity.faill(211,fieldError.getDefaultMessage(),null);
    }
    }
    ResponseEntity类如下:
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @CreateDate 2021/12/1 17:30
     * @Author yuan
     **/
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class ResultEntity<T> {
    
        private Integer code;
    
        private String message;
    
        private T data;
    
        public  static <T> ResultEntity<T> faill(Integer code,String msg,T t){
            return new ResultEntity<T>(code,msg,t);
        }
    }

    常用注解

  • 相关阅读:
    UI自动化测试(五)TestNG简介与安装步骤
    selenium webdriver 右键另存为下载文件(结合robot and autoIt)
    SpringBoot系列之日志框架介绍及其原理简介
    SpringBoot系列之profles配置多环境(篇二)
    SpringBoot系列之Spring容器添加组件方式
    MySQL基础之自连接用法简介
    MySQL基础之Natural Join用法
    MySQL基础之STRAIGHT JOIN用法简介
    SpringBoot系列之配置文件加载位置
    SpringBoot系列之外部配置用法简介
  • 原文地址:https://www.cnblogs.com/GOOGnine/p/15641227.html
Copyright © 2011-2022 走看看