@Validated @Valid

2021-08-30  本文已影响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;
}  

上一篇下一篇

猜你喜欢

热点阅读