java – 在Spring中验证对象列表
发布时间:2020-12-15 07:38:52 所属栏目:Java 来源:网络整理
导读:我有以下控制器方法: @RequestMapping(value="/map/update",method=RequestMethod.POST,produces = "application/json; charset=utf-8")@ResponseBodypublic ResponseEntityWrapper updateMapTheme( HttpServletRequest request,@RequestBody @Valid ListCo
我有以下控制器方法:
@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”验证器. 如果我删除了List并且只尝试发送一个CompanyTag,即代替: @RequestBody @Valid List<CompanyTag> categories, 使用: @RequestBody @Valid CompanyTag category, 它按预期工作,所以显然Spring不喜欢验证事物列表(尝试使用数组,但也没有用). 任何人都知道缺少什么? 解决方法
我找到了另一种方法.基本问题是您希望将列表作为服务的输入有效负载,但javax.validation不会验证列表,只验证JavaBean.诀窍是使用一个自定义列表类,它既作为List又作为JavaBean:
@RequestBody @Valid List<CompanyTag> categories 改成: @RequestBody @Valid ValidList<CompanyTag> categories 您的列表子类看起来像这样: public class ValidList<E> implements List<E> { @Valid private List<E> list; public ValidList() { this.list = new ArrayList<E>(); } public ValidList(List<E> list) { this.list = list; } // Bean-like methods,used by javax.validation but ignored by JSON parsing public List<E> getList() { return list; } public void setList(List<E> list) { this.list = list; } // List-like methods,used by JSON parsing but ignored by javax.validation @Override public int size() { return list.size(); } @Override public boolean isEmpty() { return list.isEmpty(); } // Other list methods ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |