为@ApiOperations定义springfox swagger2的自定义json序列化程序

时间:2017-02-20 16:03:28

标签: java spring-boot swagger swagger-2.0 springfox

我有一个简单的rest api,实现了单个GET方法。我想用springfox和swagger记录它。一切都很容易期待样品反应。

默认情况下,springfox使用基于反射的序列化程序 - 生成一个包含java类所有公共字段的简单json - 我想更改此行为并使用自定义序列化程序。

这是我的控制器(大部分代码都是为了提问而简化):

@RestController
public class Controller {

@RequestMapping( value = "/GetResponse", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, method = RequestMethod.GET )
    public Response getResponse( )  {
        return Response.randomInstance();
    }

}

响应类是运行时生成的 - 我无法编辑/修改该类,因此像@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不会使用它。

Swagger配置:

@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 config:

        <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>

如何在为swagger-ui.html生成样本响应时使springfox / swagger使用我的自定义json序列化程序。

1 个答案:

答案 0 :(得分:0)

我使用this answer中提供的方法,通过以下方式提供模型:

  • a directModelSubstitute
  • a genericModelSubsitute
  • 提供备用类型规则。

这样做有助于springfox架构推理引擎无法推断。使用序列化器对jackson来说是不透明的,因此对springfox也是如此。这是因为通过检查串行器的实现,很难知道如何通过线路对特定类型进行序列化/反序列化。

相关问题