• 使用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);
        }
    }

    常用注解

  • 相关阅读:
    Sublime Text 3 绝对神器
    spring 笔记3: Spring 多环境配置文件切换
    elk-logstash: window下指定jdk目录
    通过slf4j/log4j的MDC/NDC 实现日志追踪
    spring 笔记2:Spring MVC : Did not find handler method for 问题的解决
    mysql一机多实例安装记录
    Java:通过反射复制父类字段到子类。
    mybatis研究:select性能对比
    spring " expected single matching bean but found 2" 问题一例。
    数组去重复
  • 原文地址:https://www.cnblogs.com/GOOGnine/p/15641227.html
Copyright © 2020-2023  润新知