Я работаю над потреблением сваггера и продолжаю получать неполный объект Java из ответа json из-за того, что наследование и дискриминатор не поддерживаются в коде сваггера.
Я прочитал несколько статей, и они в основном все согласны с тем, что JACKSON jar будет учитывать наследование и полиморфное поведение, только если некоторые аннотации, такие как
@JsonTypeInfo(use = Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "type")
и другие аннотации для поддержки этих двух важных характеристик.
Ниже примера наследования, сгенерированного с помощью swagger-codegen.
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringCodegen", date = "2019-01-23T13:58:30.895+01:00")
public class Contrat {
private List<Support> listSupports = new ArrayList<Support>();
private List<BigDecimal> listCumulCredit = new ArrayList<BigDecimal>();
private String montantContrat = null;
public Contrat listSupports(List<Support> listSupports) {
this.listSupports = listSupports;
return this;
}
public Contrat addListSupportsItem(Support listSupportsItem) {
this.listSupports.add(listSupportsItem);
return this;
}
/**
* Get listSupports
* @return listSupports
**/
@ApiModelProperty(value = "")
public List<Support> getListSupports() {
return listSupports;
}
public void setListSupports(List<Support> listSupports) {
this.listSupports = listSupports;
}
public Contrat listCumulCredit(List<BigDecimal> listCumulCredit) {
this.listCumulCredit = listCumulCredit;
return this;
}
public Contrat addListCumulCreditItem(BigDecimal listCumulCreditItem) {
this.listCumulCredit.add(listCumulCreditItem);
return this;
}
/**
* Get listCumulCredit
* @return listCumulCredit
**/
@ApiModelProperty(value = "")
public List<BigDecimal> getListCumulCredit() {
return listCumulCredit;
}
public void setListCumulCredit(List<BigDecimal> listCumulCredit) {
this.listCumulCredit = listCumulCredit;
}
public Contrat montantContrat(String montantContrat) {
this.montantContrat = montantContrat;
return this;
}
/**
* Get montantContrat
* @return montantContrat
**/
@ApiModelProperty(value = "")
public String getMontantContrat() {
return montantContrat;
}
public void setMontantContrat(String montantContrat) {
this.montantContrat = montantContrat;
}
Пример подкласса:
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringCodegen", date = "2019-01-23T13:58:30.895+01:00")
public class ContratAgregavie extends Contrat {
private String identifiantConseiller = null;
private String codeRetourAppelService = null;
private String libelleAssocieCodeRetour = null;
private String identifiantContrat = null;
private String etablissementAssureur = null;
}
При таком способе генерации наследование полностью игнорируется при создании объекта java из ответа json, однако сообщение JSON содержит все подклассы.
Код, отвечающий за конвертацию
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
porteFeuilleCollecte = mapper.readValue(entityString, Portefeuille.class);
Помогите вам, ребята, найти решение или обойти эту проблему, чтобы сгенерированные классы содержали аннотации JSON , чтобы Джексон мог правильно сопоставить данные из сообщения JSON .