Swagger-core: Em um ApiModel swagger aninhado, o ApiModelProperty 'exemplo' interno de ApiModel não é mostrado na definição swagger

Criado em 7 out. 2016  ·  5Comentários  ·  Fonte: swagger-api/swagger-core

Oi,

Estou tendo um ApiModel que contém outro ApiModel (aninhado). No arquivo de definição de swagger, gerado para meu aplicativo da web, não há a propriedade anotada, 'exemplo', para os atributos que estão lá no ApiModel aninhado ( ApiModel interno ). Mas os valores de exemplo anotados para os atributos no ApiModel externo estão lá na definição de swagger.

Deixe-me explicar isso com um exemplo. (Vou explicar o que quero dizer com ApiModel interno e ApiModel externo por meio do exemplo a seguir)

Minha classe "ListActivity" está anotada com a anotação "@ApiModel" conforme abaixo. Este é o ApiModel externo

@ApiModel(
            value = "List of activities", 
            description = "This contains a set of activities that matches a given criteria as a collection")
public class ActivityList

Dentro da classe "ActivityList", tenho dois atributos. Esses são inteiros -> "contagem" e lista-> "atividades". Ambos os atributos são anotados usando a anotação "@ApiModelProperty" conforme abaixo.

@ApiModelProperty(
            value = "Number of total resources.",
            example = "1")
 @JsonProperty("count")
 private int count;

@ApiModelProperty(
            value = "Returns the list of activities that match the offset and limit parameter values that were specified.")
@JsonProperty("activities")
private List<Activity> activities;

Como "Activity" é um objeto, criei um ApiModel para a classe "Activity". Estou anotando como abaixo.

Agora, este é o ApiModel interno que está dentro do ApiModel "ActivityList" ( ApiModel externo ).
(Espero que agora você possa entender o que quero dizer com ApiModels aninhados).

@ApiModel(
          value = "Activity", 
         description = "An activity instance carries a unique identifier that can be used to identify a particular operation instance uniquely")
public class Activity;

Dentro da classe "Activity", tenho outros dois atributos. Esses são String -> "activityId" e String -> "código". Estou anotando esses atributos usando @ApiModelProperty, conforme mostrado abaixo.

@ApiModelProperty(
            name = "activityId",
            value = "Activity identifier",
            required = true,
            example = "ACTIVITY_1")
@JsonProperty("activityId")
private String activityId;

@ApiModelProperty(
            name = "code",
            value = "Activity code",
            required = true,
            example = "DEVICE_RING")
@JsonProperty("code")
private String code;

Depois disso, estou gerando o arquivo de definição de swagger. No arquivo gerado, os valores de exemplo foram definidos apenas para o atributo "contagem" que estava no ApiModel externo . Isso significa que o valor de exemplo do atributo "count" é definido como "1", conforme anotei no exemplo fornecido acima.

Mas todos os valores de exemplo que defini no ApiModel interno que são os atributos da classe "Activity", não vêm para o arquivo de definição de swagger gerado. Em vez disso, ele mostra apenas "tipo": "string". Conforme o exemplo dado acima, os valores de exemplo, "ACTIVITY_1" e "DEVICE_RING" não estão configurados no arquivo de definição de swagger, para os atributos "activityId" e "code".

Portanto, na IU do swagger, o esquema json que estou obtendo é mostrado abaixo. Apenas "contagem" é definido como "1" e outras chaves são definidas com seus tipos de dados.

{
    "count": 1,
    "activities": [{
        "activityId": "string",
        "code": "string"
    }]
}

A definição de arrogância é a seguinte.

 "List of activities": {
         "type": "object",
         "properties": {
            "count": {
               "type": "integer",
               "format": "int32",
               "example": 1, **(example values are set here as given in the annotations)** 
               "description": "Number of total resources."
            },

            "activities": {
               "type": "array",
               "description": "Returns the list of activities that match the offset and limit parameter values that were specified.",
               "items": {
                  "$ref": "#/definitions/Activity"
               }
            }
         },
         "description": "This contains a set of activities that matches a given criteria as a collection"
}


"Activity": {
         "type": "object",
         "properties": {
            "activityId": {
               "type": "string" **(example values are not set here though I set it in the annotations, even the property 'example' isn't displayed)**  
            }
         }
 }

Portanto, em um ApiModel de swagger aninhado, o 'exemplo' ApiModelProperty interno de ApiModel não é mostrado na definição de swagger.

Existe alguma maneira de definir essa propriedade de exemplo para os

Obrigado

Comentários muito úteis

Oi,

qual é a situação deste problema? Não está claro por que foi fechado. Estou passando por uma situação semelhante à descrita acima em Java, quando objetos aninhados, cujas classes são anotadas com @ApiModel , não são gerados na definição da API do cliente JSON do swagger. Não faz diferença se as classes Java dos objetos aninhados são colocadas em sua própria unidade de compilação e são declaradas como classes aninhadas da classe de argumento da API para a qual o JSON é gerado.

Obrigado por me avisar

Todos 5 comentários

Por favor, crie um caso de teste para isso em um PR

Oi,

qual é a situação deste problema? Não está claro por que foi fechado. Estou passando por uma situação semelhante à descrita acima em Java, quando objetos aninhados, cujas classes são anotadas com @ApiModel , não são gerados na definição da API do cliente JSON do swagger. Não faz diferença se as classes Java dos objetos aninhados são colocadas em sua própria unidade de compilação e são declaradas como classes aninhadas da classe de argumento da API para a qual o JSON é gerado.

Obrigado por me avisar

qual é a solução fornecida?

ainda sem solução em 2020?

É um assunto encerrado de 2016. Muita coisa mudou desde então. Se você ainda tiver problemas, é melhor preencher um novo tíquete detalhado.

Esta página foi útil?
0 / 5 - 0 avaliações