List不生效@NotEmpty注解,传入null未返回400错误如何解决?
问题:List含null元素时未触发400校验错误
我有一个通过请求体填充的List,期望当请求中无值或传入null时返回400 BAD Request状态码。目前无值传递时表现符合预期,但传入null元素的List时未触发400错误,该如何处理?
相关代码
class Data { @NotEmpty private List<@Valid String> values; }
测试场景
- 请求体1(含有效值)返回200(符合预期):
{ "values": [ "randomValue" ] } - 请求体2(无values字段)返回400(VALIDATION_ERROR,符合预期):
{ } - 请求体3(空List)返回400(VALIDATION_ERROR,符合预期):
{ "values": [ ] } - 请求体4(含null元素的List)返回200(预期应为400 VALIDATION_ERROR):
{ "values": [ null ] }
解决方案
问题出在@NotEmpty仅校验List本身:确保List不为null、不是空集合,但不会校验集合内的元素是否为null。要实现元素非null的校验,需要给泛型中的String添加@NotNull注解(如果需要同时校验字符串非空,可改用@NotBlank),同时保留@Valid触发嵌套校验。
修改后的代码:
class Data { @NotEmpty private List<@Valid @NotNull String> values; }
如果需要进一步限制字符串不能是空串或空白字符,使用@NotBlank:
class Data { @NotEmpty private List<@Valid @NotBlank String> values; }
另外要确保在控制器接收请求体的方法参数上添加@Valid注解(或类上标注@Validated),这样嵌套校验逻辑才会被触发。
内容的提问来源于stack exchange,提问作者Skul
相关产品推荐
相关产品推荐

