美文网首页
@Validated @Valid

@Validated @Valid

作者: 毛仑上保罗先生 | 来源:发表于2021-08-30 14:49 被阅读0次

    总原则:
    @Validated:
    1,"模型参数"必须处于参数前才能生效
    2,"非模型参数"必须处于类上才能生效

    @Valid:
    1,用法和@Validated一样
    2,嵌套验证将@Valid添加到实体字段前, 而且必须与@Requestbody配合, 并且需要通过@Valid或者@Validated才能触发验证
    

    如果后面有BindingResult参数,即使有全局异常也不会触发, 其将会把所有参数验证异常在BindingResult中体现

    @PostMapping("/login")
        public String login(@RequestBody @Valid LoginCommand loginCommand, BindingResult bindingResult) {
            if (bindingResult.hasErrors()) {
                return bindingResult.getAllErrors().get(0).getDefaultMessage();
            }
            return "success";
        }
    

    如果是基础类型一定要将@Validated或者 @Valid加在类上才会触发, 并且BindingResult 不能加在基础类型参数后

    @GetMapping("/sendCode/{mobile}")
        public void sendCode(@PathVariable @Pattern(regexp = "^1\\d{10}$", message = "手机号格式有误") String mobile) {
            System.out.println(2232);
        }
    

    如果是实体验证必须将@Validated或者 @Valid加在参数前才会触发

      @PostMapping("/save")
        public String save(@RequestBody @Valid UserCommand userCommand) { 
            return "success";
        }
    

    嵌套验证必须将@Valid加载成员属性上如果不为空还需要加其他注解,再配合上述关于实体类验证

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class UserCommand {
        @NotBlank(message = "名称不能为空")
        private String name;
        private Integer age;
        @Valid
        @NotNull(message = "用户详情不能为空")
        private UserDetailCommand userDetailCommand;
    }  
    
    

    相关文章

      网友评论

          本文标题:@Validated @Valid

          本文链接:https://www.haomeiwen.com/subject/riqoiltx.html