gpt4 book ai didi

java - 为 @ApiOperations 为 springfox swagger2 定义自定义 json 序列化器

转载 作者:行者123 更新时间:2023-11-30 06:53:10 25 4
gpt4 key购买 nike

我有一个简单的rest api,实现了单个 GET 方法。我想使用 springfox 和 swagger 来记录它。一切都很简单,只需等待示例响应即可。

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

这是我的 Controller (为了解决问题,大部分代码都被简化了):

@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 配置:

        <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/swagger 在为 swagger-ui.html 生成示例响应时使用我的自定义 json 序列化器。

最佳答案

我赞同 this answer 中提供的方法通过以下方式提供模型:

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

它的作用是帮助 springfox 模式推理引擎处理它无法推断的内容。使用序列化器对于 jackson 来说是不透明的,因此对于 springfox 来说也是不透明的。这是因为通过检查序列化器的实现很难了解特定类型如何通过网络进行序列化/反序列化。

关于java - 为 @ApiOperations 为 springfox swagger2 定义自定义 json 序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com