Spring boot 如何验证使用Jackson多态反序列化反序列化的对象

Spring boot 如何验证使用Jackson多态反序列化反序列化的对象,spring-boot,jackson,bean-validation,Spring Boot,Jackson,Bean Validation,鉴于以下要求: 或 我已根据searchType属性将查询反序列化为FounderSearch或NameOrAddressSearch对象 但是,Javax验证被忽略,因为它不是顶级对象。我如何解决这个问题 顶级对象: 其中一个子级别对象: 如果在嵌套对象上添加@Valid注释,它也会起作用 类似于此,首先是具有验证约束的所有字段 @资料 公共类FounderSearch扩展了QueryObject{ @Min(1) @Max(60) @Valid private Integer maxResu

鉴于以下要求:

我已根据searchType属性将查询反序列化为FounderSearch或NameOrAddressSearch对象

但是,Javax验证被忽略,因为它不是顶级对象。我如何解决这个问题

顶级对象:

其中一个子级别对象:


如果在嵌套对象上添加@Valid注释,它也会起作用

类似于此,首先是具有验证约束的所有字段

@资料 公共类FounderSearch扩展了QueryObject{

@Min(1) @Max(60)
@Valid
private Integer maxResult = 20;
@Pattern(regexp = "\\d{11}")
@Valid
private String personNumber;
private List<CodeType> functions;
private Boolean activeFunctions;

public boolean isFounderSearch() {
    return true;
}

public SearchType getSearchType() {
    return SearchType.FOUNDERSEARCH;
}

}

告诉我在哪里,没有可以放置的字段。
/enterprises-api/{{version}}/enterprises?query={"searchType":"NAMEORADDRESSSEARCH","maxResult":"61",...}
@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "searchType")
@JsonSubTypes({
        @JsonSubTypes.Type(value = FounderSearch.class, name = "FOUNDERSEARCH"),
        @JsonSubTypes.Type(value = NamerOrAddressSearch.class, name = "NAMEORADDRESSSEARCH")
})
public abstract class Query {
    public abstract boolean isFounderSearch();
}
@Data
public class FounderSearch extends QueryObject {

    @Min(1) @Max(60)
    private Integer maxResult = 20;
    @Pattern(regexp = "\\d{11}")
    private String personNumber;
    private List<CodeType> functions;
    private Boolean activeFunctions;

    public boolean isFounderSearch() {
        return true;
    }

    public SearchType getSearchType() {
        return SearchType.FOUNDERSEARCH;
    }
}
@Min(1) @Max(60)
@Valid
private Integer maxResult = 20;
@Pattern(regexp = "\\d{11}")
@Valid
private String personNumber;
private List<CodeType> functions;
private Boolean activeFunctions;

public boolean isFounderSearch() {
    return true;
}

public SearchType getSearchType() {
    return SearchType.FOUNDERSEARCH;
}