加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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 ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读