spring校驗校驗參數的嵌套狀況

涉及到的註解: @Validated 和 @Validjava


使用的到類:app

Class Acode

public class A {

    @NotEmpty(message="name can't be empty")
    private String name;
    
    @NotEmpty(message="id can't be empty")
    private Long id;
}

Class B對象

public class B {
    
    @NotEmpty(message = "aList can't be empty")
    private List<@Valid A> aList;
}

Class C接口

public class C {
    
    @NotNull(message = "a can't be empty")
    @Valid
    private A a;
}

一. 參數直接是List

(1). 首先在Controller頂部加上註解 @Validated
@Validated
    @RestController
    @RequestMapping("/xxx/")
    public class XXXController {}
(2). 在Controller接口定義的對應的List參數中增長 @Valid 註解
@PostMapping("yyy")
    public Result<Void> testValidator(@Valid @RequestBody List<A> params){}

二.參數是對象, 對象裏面嵌套List

(1). 首先在Controller頂部加上註解 @Validated
@Validated
    @RestController
    @RequestMapping("/xxx/")
    public class XXXController {}
(2). 在Controller接口定義的對應的參數中增長 @Validated註解,而且增長 @Valid 註解 (由於@Valid能夠起到嵌套校驗的做用)
@PostMapping("yyy")
    public Result<Void> testValidator(@Valid @Validated @RequestBody B b){}
(3). 在實體的list屬性上增長 @Valid註解
@NotEmpty(message = "aList can't be empty")
    private List<@Valid A> aList;
    // 或者
    @NotEmpty(message = "aList can't be empty")
    @Valid 
    private List<A> aList;

三.參數是對象, 對象裏面嵌套對象

(1). 首先在Controller頂部加上註解 @Validated
@Validated
    @RestController
    @RequestMapping("/xxx/")
    public class XXXController {}
(2). 在Controller接口定義的對應的參數中增長 @Validated註解,而且增長 @Valid 註解 (由於@Valid能夠起到嵌套校驗的做用)
@PostMapping("yyy")
    public Result<Void> testValidator(@Valid @Validated @RequestBody C c){}
(3). 在實體的對象屬性上增長 @Valid註解
@NotNull(message = "a can't be empty")
    @Valid
    private A a;

Tip:@Valid 的使用和 @Validated 的分組功能不衝突,正常使用 group 屬性集合ip

相關文章
相關標籤/搜索