• @Validated 和 @Valid


    参考 :
    https://blog.csdn.net/Goodbye_Youth/article/details/90905688

    @Valid有jsr303提供,而@Validated有spring提供
    效果一样但是,后者比前者功能更强大, 提供分组(类似于@JsonView)

    正常在 @Validated 注解不加分组参数的情况下,@Valid 注解和 @Validated 注解会随机校验实体类中不加 groups 属性的字段,不分先后顺序

    #pojo

    @Data
    public class User implements Serializable {
    
        private static final long serialVersionUID = -8677072538094918597L;
    
        public interface IUserName {
        }
        //与@JsonView效果差不多
        public interface IAllFiled extends IUserName{
        }
    
        @NotBlank(groups = IUserName.class, message = "username can't be null")
        private String username;
        @NotNull(groups = IAllFiled.class, message = "age cant'be null")
        private Integer age;
        @NotNull(message = "性别只能为0或1")
        @Min(value = 0, message = "性别只能为0或1")
        @Max(value = 1, message = "性别只能为0或1")
        private Integer gender;
    }
    

    #Controller

    没有指定groups

    
        @ResponseBody
        @RequestMapping("/test3")
        public String test3(@Validated User user, BindingResult result) {
           if (result.hasErrors()){
               result.getFieldErrors().stream()
                       .map(DefaultMessageSourceResolvable::getDefaultMessage)
                       .forEach(System.out::println);
           }
            System.out.println(user);
            return "test3";
        }
    
        
        @ResponseBody
        @RequestMapping("/test4")
        public String test4(@Valid User user,BindingResult result) {
           if (result.hasErrors()){
               result.getFieldErrors().stream()
                       .map(DefaultMessageSourceResolvable::getDefaultMessage)
                       .forEach(System.out::println);
           }
            System.out.println(user);
            return "test4";
        }
    

    发送请求 localhost:8080/test3?username&age&gender=12

    结果:

    结论: 如果属性加了groups使用@Validated或是@Valid不指定groups,那么带有groups的属性验证不会生效


    指定gruop , @Valide不支持指定group

    这里的IAllField继承了IUserName所以会校验age也会校验username

        @ResponseBody
        @RequestMapping("/test3")
        public String test3(@Validated(User.IAllFiled.class) User user, BindingResult result) {
            result.getFieldErrors().stream()
                    .map(DefaultMessageSourceResolvable::getDefaultMessage)
                    .forEach(System.out::println);
            System.out.println(user);
            return "test3";
        }
    

    结果:


    因为gender没有指定groups所以不会被判断


    所以推荐使用@validated

  • 相关阅读:
    Gym 100801D Distribution in Metagonia (数学思维题)
    Gym 100801E Easy Arithmetic (思维题)
    GNOME编辑器--gedit 构建基本脚本
    linux默认编辑器 sublime
    su和su-命令的本质区别
    #ifdef #ifndef使用
    linux 安装软件程序
    linux命令行与shell脚本编程大全---更多bash shell命令
    预处理语句--#define、#error和#warning
    FW开发代码规范---小任性(2)
  • 原文地址:https://www.cnblogs.com/kikochz/p/12819035.html
Copyright © 2020-2023  润新知