首页 > 解决方案 > 带有继承的 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..
}

弹簧休息控制器:

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

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

标签: javaspringrestvalidation

解决方案


推荐阅读