我有以下控制器方法:
@RequestMapping(value="/map/update", method=RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseEntityWrapper updateMapTheme(
HttpServletRequest request,
@RequestBody @Valid List<CompanyTag> categories,
HttpServletResponse response
) throws ResourceNotFoundException, AuthorizationException {
...
}
CompanyTag 是这样定义的:
public class CompanyTag {
@StringUUIDValidation String key;
String value;
String color;
String icon;
Icon iconObj;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
...
}
问题是未触发验证,未验证 CompanyTag 列表,从未调用“StringUUIDValidation”验证器。
如果我删除列表并仅尝试发送单个 CompanyTag,即代替:
@RequestBody @Valid List<CompanyTag> categories,
利用:
@RequestBody @Valid CompanyTag category,
它按预期工作,因此显然 Spring 不喜欢验证事物列表(尝试使用数组,但也不起作用)。
有人知道缺少什么吗?
原文由 TheZuck 发布,翻译遵循 CC BY-SA 4.0 许可协议
我找到了另一种有效的方法。基本问题是您希望有一个列表作为您的服务的输入负载,但 javax.validation 不会验证列表,只会验证 JavaBean。诀窍是使用一个既充当 List 又 充当 JavaBean 的自定义列表类:
改成:
你的列表子类看起来像这样: