带有继承的 Spring 验证

Ogn*_*šić 8 java validation rest spring

我正在尝试验证有点分层的 DTO(formModel,无论您喜欢什么术语)(继承和依赖其他类)。

是否可以使以下模型配置工作:

public abstract class A {

    @NotNull
    private String fieldA1;

    @NotNull
    @Size(min = 2, max = 30)
    private String fieldA2;

    // ... and so on

}


public class B extends A {

    @NotNull
    private String fieldB1;

    @NotNull
    private Xyz fieldB2;

    // and so on
}


public class Xyz {

    @NotNull
    private String fieldXyz1;

    // etc..
}
Run Code Online (Sandbox Code Playgroud)

弹簧架控制器:

@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity addCustomer(@RequestBody @Valid B customerDto, BindingResult bindingResult) {
// controller logic here
}
Run Code Online (Sandbox Code Playgroud)

问题是:只有似乎“有效”的约束注释是父类 A 上的那些。我提交了一个在 A 类中包含错误字段的请求,bindingResult.hasErrors()返回 true。如果我提交的请求在 B 类或 Xyz 类中包含错误字段,bindingResult.hasErrors()则为 false,并且控制器会继续像请求一样正常运行。任何想法为什么?