传递集合参数时,@NotEmpty注解失效问题

如果前端是通过json传参,即Content-Type为application/json,后端接收要用@RequestBody

场景一

 如果list集合是参数的一个属性,可以在该集合上面加@NotEmpty,接收参数的前面加@Validate注解。这种场景比较简单,一般没什么问题。

//后端接收代码
@RestController
@RequestMapping("/test")
public Class testController {
    
    @PostMapping(value="/test")
    public Result test(@Validate @RequestBody School school) {
        
    }
}


//实体类
@Data
public Class School{
    private String name;
    @NotEmpty(message = "学生不能全为空")
    private List<Student> students;
}

场景二

如果后端接收的参数是一个集合,如List<School> schools,在参数前面加@Validated,在实体类School里的students属性前面加@NotEmpty注解。此时@NotEmpty是不起作用的。

//后端接收代码
@RestController
@RequestMapping("/test")
public Class testController {
    
    @PostMapping(value="/test")
    public Result test(@Validated @RequestBody List<School> schools) {
        
    }
}


//实体类
@Data
public Class School{
    private String name;
    @NotEmpty(message = "学生不能全为空")
    private List<Student> students;
}

还需要在controller类上面加@Validated注解,参数前面加@Valid。

//后端接收代码
@RestController
@RequestMapping("/test")
@Validated
public Class testController {
    
    @PostMapping(value="/test")
    public Result test(@Valid @RequestBody List<School> schools) {
        
    }
}


//实体类
@Data
public Class School{
    private String name;
    @NotEmpty(message = "学生不能全为空")
    private List<Student> students;
}

场景三

如果list参数里面还有一个list集合属性,如school里有一个students属性,这是一个list集合,Student对象里有addresses属性,这也是一个集合。如果直接在addresses属性上面使用@NotEmpty注解,addresses的非空判断是不起作用的。

//后端接收代码
@RestController
@RequestMapping("/test")
public Class testController {
    
    @PostMapping(value="/test")
    public Result test(@Validate @RequestBody School school) {
        
    }
}


//实体类
@Data
public Class School{
    private String name;
    @NotEmpty(message = "学生不能全为空")
    private List<Student> students;
}

@Data
public Class Student{
    private String name;
    @NotEmpty(message = "地址不能全为空")
    private List<String> addresses;
}

还需要在School的students上面加上@Valid注解。

//后端接收代码
@RestController
@RequestMapping("/test")
public Class testController {
    
    @PostMapping(value="/test")
    public Result test(@Validate @RequestBody School school) {
        
    }
}


//实体类
@Data
public Class School{
    private String name;
    @NotEmpty(message = "学生不能全为空")
    @Valid
    private List<Student> students;
}

@Data
public Class Student{
    private String name;
    @NotEmpty(message = "地址不能全为空")
    private List<String> addresses;
}

另外

如果不用@NotEmpty注解,可以用@Size(min = 1, message = "至少选择一个")注解。

但不能用@Min注解。@Min注解是判断数值的,而不是集合大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值