gpt4 book ai didi

java - 在 Spring 中验证对象列表

转载 作者:IT老高 更新时间:2023-10-28 13:05:11 27 4
gpt4 key购买 nike

我有以下 Controller 方法:

@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” validator 从未被调用。

如果我删除列表并仅尝试发送单个 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 ...
}

关于java - 在 Spring 中验证对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28150405/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com