【发布时间】:2021-01-02 22:30:34
【问题描述】:
我正在尝试验证一个模型,该模型继承自另一个模型,并且此父模型具有 @NotBlank 注释来验证参数。但是这个验证在接受子类对象列表的控制器中被绕过了。
sn-p 代码应该可以很好地了解场景
public abstract class A {
@NotBlank
private String name;
}
public class B extends A {
private String type;
}
@PostMapping(consumes= MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity saveRoles(@Valid @RequestBody List<B> roles){
// ideally it should not land here if request has blank name. But it seems to land here.
// logic
}
请求正文 -
[
{
"name": "",
"type": "system"
}
]
【问题讨论】:
-
是的,应该这样,问题与未处理的注释无关,而是与
javax.validation的工作方式有关。您还需要将@Valid放在列表中的<B>上。所以List<@Valid B>。当您接受一个集合时,它需要知道它应该传播验证。
标签: java spring javax.validation