Как установить @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;

}