Как заставить SpringFox Swagger отображать строковый параметр как другой тип модели? - PullRequest
0 голосов
/ 29 июня 2018

Как сделать так, чтобы Swagger документировал параметр ресурса String как полный тип класса?

т.е. У меня есть объявление ресурса:

@PatchMapping(path="/{id}")
public ApiResponse<MyObject> patch(@PathVariable String id, @RequestBody String myObjText) {

Я хочу, чтобы документ myObjText был задокументирован как имеющий модель типа MyObject, и в то же время я мог бы получать необработанный текст JSON в теле метода (это потому, что позже я хочу вызвать readerForUpdating() через Джексона * 1009). *).

@ApiParam, кажется, игнорируется для @RequestBody параметров, и ни одна из @ApiModel* аннотаций там не допускается.

Я использую springfox, так как это ресурсы Spring Rest.

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

В моем случае необходимо внести два изменения:

1) Добавлено @ImplicitParams (имя типа не соответствует имени пакета)

@ApiImplicitParams({
    @ApiImplicitParam(name = "requestBody", required = true,
        dataType = "MyObject", paramType = "body")
})

2) Зарегистрированный неявный тип модели (особенно, когда тип ответа ResponseEntity(Void.class)

@Configuration
public class SwaggerConfiguration {

    @Autowired
    private TypeResolver typeResolver;

    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
            .additionalModels(typeResolver.resolve(MyObject.class));
    }

}
0 голосов
/ 29 июня 2018

Попробуйте переопределить параметр String как @ApiParam(hidden = true) и добавьте новый параметр для вашего объекта:

@ApiImplicitParams({
        @ApiImplicitParam(name = "My obj text",
        value = "myObjText", required = true,
        dataType = "com.example.MyObject", paramType = "body")
})

Как это реализовано здесь: Как неявно документировать dto использование, когда мы используем класс сущности в качестве api param?

...