Почему атрибут «name» @ApiModelProperty не имеет никакого эффекта? - PullRequest
0 голосов
/ 31 октября 2018

В моем весеннем загрузочном приложении у меня есть объект DTO со вложенным списком объектов DTO. Класс:

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "contact")
public class ContactDTO {
  @ApiModelProperty(value = "id", example = "1", hidden = true)
  private Long id;

  @ApiModelProperty(value = "first name", example = "John")
  private String firstName;

  @ApiModelProperty(value = "last name", example = "Doe")
  private String lastName;

  @Builder.Default
  @ApiModelProperty(value = "list of phone numbers", name = "phonenumbers")
  List<PhoneNumberDTO> phoneNumberDTOList = new ArrayList<>();
}

пример значения чванства для почтового запроса:

{
  "firstName": "John",
  "lastName": "Doe",
  "phoneNumberDTOList": [
    {
      "label": "Company",
      "number": "put number here"
    }
  ]
}


Я думал, что свойство name = ... в @ApiModelProperty перезаписывает имя переменной phoneNumberDTOList, но это не работает: (

Я использую Springfox-Swagger 2.9.2

  implementation 'io.springfox:springfox-swagger2:2.9.2'
  implementation 'io.springfox:springfox-swagger-ui:2.9.2'


Что я делаю не так?

1 Ответ

0 голосов
/ 31 октября 2018

Пожалуйста, проверьте эту проблему:

@ Атрибут «name» ApiModelProperty не имеет эффекта

  • Мы не хотим, чтобы когда-либо был случай, когда модель сериализации отличается от документируемой.

  • Фактически существование @ApiModelProperty объясняется тем фактом, что мы хотим использовать те же аннотации, что и swagger-core . Однако мы берем философию использования аннотаций только для дополнения документации. Если, например, вы аннотировали свои модели с помощью @JsonProperty и т. д., мы не хотим дублировать это с помощью @ApiModelProperty, поскольку очень легко выйти из синхронизации.

Существует обходной путь с @JsonProperty аннотацией:

...

@JsonProperty("phonenumbers")
@ApiModelProperty(value = "list of phone numbers")
List<PhoneNumberDTO> phoneNumberDTOList = new ArrayList<>();
...