gpt4 book ai didi

java - 使用 Bean Validation 2.0 (JSR-308) 和 Spring 5 验证 bean 列表

转载 作者:行者123 更新时间:2023-12-02 01:55:46 25 4
gpt4 key购买 nike

Spring 5 应该支持 Bean Validation 2.0,它引入了对列表类型的验证,但我似乎无法让它为我工作。

我的 @RestController 有以下端点:

@PostMapping("/foos")
public List<Foo> analysePoints(@RequestBody @Valid List<@Valid Foo> request) {
...
}

类 Foo 在其属性上有一些 JSR 验证注释。

不幸的是,这似乎根本无法验证它。在 Spring 5 之前,我通过包装 List<Foo> 来解决这个问题。在一个单独的请求 bean 对象中,这在这种情况下也有效,但我不想这样做,因为它改变了所需的 json 的格式。

有什么办法可以让它工作吗?

最佳答案

javax.validation 不会验证列表,只会验证 JavaBean。解决方法是使用自定义的 List 类:

而不是

@RequestBody @Valid List<@Valid Foo> request

用途:

@RequestBody @Valid ValidList<@Valid Foo> request

有效列表

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 - 使用 Bean Validation 2.0 (JSR-308) 和 Spring 5 验证 bean 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314038/

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