У меня есть простой априод для отдыха с использованием одного метода GET. Я хотел бы, чтобы это было документировано с использованием springfox и swagger. Все очень легко ожидать ответа образца.Определите пользовательский сериализатор json для springfox swagger2 для @ApiOperations
По умолчанию springfox использует сериализатор на основе отражений - создает простой json со всеми общедоступными полями класса java - я хотел бы изменить это поведение и использовать собственный сериализатор.
Вот мой контроллер (большая часть кода упрощена для вопроса):
@RestController
public class Controller {
@RequestMapping(value = "/GetResponse", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = RequestMethod.GET)
public Response getResponse() {
return Response.randomInstance();
}
}
Response класс генерируется во время выполнения - я не могу редактировать/изменять этот класс, поэтому аннотации, как @ApiModelProperty являются не представляется возможным. По умолчанию я использую пользовательский сериализатор (StaticResponseConverter также автогенерируемая):
@JsonComponent
public class Serializer extends JsonSerializer<Response> {
@Override
public void serialize(Response response, JsonGenerator generator, SerializerProvider provider)
throws IOException {
generator.writeRaw(StaticResponseConverter.toJson(response));
}
}
Этот сериализатору работает без проблем для обычных вызовов API. Тем не менее, он не используется swagger2 при создании отклика образца.
Кураж конфигурации:
@Configuration
@EnableSwagger2
public class SwaggerConfig
{
@Bean
public Docket api()
{
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(x -> x.declaringClass().equals(Controller.class)).paths(PathSelectors.any())
.build();
}
}
Я попробовал этот подход:
Spingfox not recognizing custom serializer when generating JSON model for swagger
Существует также такой подход, но я не могу применить его к springfox.
Swagger is it possible to override custom object serialization
Maven конфигурация:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
Как сделать springfox/чванство, чтобы использовать свой собственный JSon сериалайзер при генерации ответа выборки для развязности-ui.html.
Я второй подход, приведенный в [этом ответе] (http://stackoverflow.com/a/39918957/19219). –