当前位置: 首页 > 知识库问答 >
问题:

Spring中对象列表的验证

颜云瀚
2023-03-14
@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 {
...
}
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;
    }
   ...
}
@RequestBody @Valid List<CompanyTag> categories,

使用:

@RequestBody @Valid CompanyTag category,

它按照预期工作,所以Spring显然不喜欢验证事物列表(尝试使用数组,但也不起作用)。

有人知道缺了什么吗?

共有1个答案

万勇
2023-03-14

我找到了另一个可行的方法。基本问题是,您希望有一个列表作为服务的输入负载,但是javax.validation不会验证列表,只验证JavaBean。诀窍是使用一个自定义的list类,它同时充当list和JavaBean:

@RequestBody @Valid List<CompanyTag> categories

更改为:

@RequestBody @Valid ValidList<CompanyTag> categories

list子类看起来如下所示:

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 ...
}
 类似资料:
  • 问题内容: 我有以下控制器方法: CompanyTag是这样定义的: 问题是没有触发验证,没有验证CompanyTag列表,从不调用“ StringUUIDValidation”验证器。 如果我删除列表,仅尝试发送单个CompanyTag,即代替: 利用: 它可以按预期工作,因此显然Spring不喜欢验证事物列表(而是尝试使用数组,但同样没有效果)。 有人知道缺少什么吗? 问题答案: 我发现了另一

  • 我使用mysql存储过程来检索对象列表。这可能吗? 我在看这篇文章 问题: > 如何使用结果集检索select语句中的对象列表? 如何将结果集映射到对象列表? CREATE DEFINER=@PROCEDURE(ININT,OUTINT,OUTINT,OUTVARCHAR(50),OUTVARCHAR(50),OUTFLOAT 内部连接(从rate中选择aid,r.rate,re.country_

  • 问题内容: 在我的Spring Boot应用程序中,我具有以下内容的application.yaml配置文件。我想将其作为带有通道配置列表的Configuration对象注入: 我想用PaymentConfiguration对象列表填充@Configuration对象: 我使用@Autowired构造函数将其作为普通bean注入。xyz的值正确填充,但是当Spring尝试将yaml解析为对象列表时

  • 有什么线索吗?这里出了什么问题?

  • YAML文件: 配置类: 我希望@value注释允许我注入相应的属性值,但这似乎不起作用(注入'id'字段似乎工作得很好)。

  • 我有以下列表,里面是另一个列表,然后是字符串列表 <代码>列表 示例 除了执行嵌套循环并最终替换列表之外,还有更好的方法吗?也许有溪流?