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
@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
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.
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