ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

@Validated 和 @Valid

2020-05-02 18:52:56  阅读:418  来源: 互联网

标签:test3 System Valid result groups println Validated


@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";
    }

结果:


所以推荐使用@validated

标签:test3,System,Valid,result,groups,println,Validated
来源: https://www.cnblogs.com/kikochz/p/12819035.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有