Полиморфная поддержка Swagger Codegen Inheritance - PullRequest
0 голосов
/ 25 января 2019

Я работаю над потреблением сваггера и продолжаю получать неполный объект 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 .

...