Как установить @ApiModelProperty dataType в строку для документации Swagger
я использую Spring MVC (через Spring Boot) и интегрировал документацию Swagger API, используя библиотеку swagger-spring-mvc.
у меня есть класс, который выглядит примерно так:
@ApiModel
public class CartItem {
...
private Money listPrice; // joda money class
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(required = true, dataType = "java.lang.String")
public Money getListPrice() {
return listPrice;
}
...
}
поскольку я использую ToStringSerializer для этого поля, он возвращает listPrice.toString в JSON, другими словами:
{
"listPrice": "USD 10.50"
}
однако документация swagger не соблюдает тип данных = " java.ленг.Строка." Он показывает модель ответа as:
"CartItem": {
"description": "",
"id": "CartItem",
"properties": {
"listPrice": {
"required": false,
"type": "Money"
}
}
}
Я попытался поместить аннотацию @ApiModelProperty в поле, а также метод, и в обоих случаях required
поле уважается, но dataType
поле игнорируется. Я также попытался использовать "String", "string" и " java.ленг.Строка" на тип данных, но ни один из них не работал.
Я что-то пропустил, или это просто ошибка в библиотеке swagger-spring-mvc?
2 ответов
получается, что dataType
полностью игнорируется в текущей версии библиотеки Swagger Spring MVC. Я нашел здесь краткое обсуждение:
https://github.com/springfox/springfox/issues/602
похоже, что он может быть включен в версию 2, как только это выйдет.
EDIT: хотя версия 2 говорит, что поддерживает тип данных, он, похоже, не работает в это время. Лучший подход для моих нужд-настроить документацию настройки с прямой подстановкой модели, как это:
@Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2)
.directModelSubstitute(Money.class, String.class);
}
@ApiModel
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Model {
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonProperty("myDate")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private final LocalDateTime myDateTime;
}