Spring boot 如何验证使用Jackson多态反序列化反序列化的对象
鉴于以下要求: 或 我已根据searchType属性将查询反序列化为FounderSearch或NameOrAddressSearch对象 但是,Javax验证被忽略,因为它不是顶级对象。我如何解决这个问题 顶级对象: 其中一个子级别对象: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
如果在嵌套对象上添加@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;
}