当前位置: 首页 > 知识库问答 >
问题:

定义一个自定义的json序列化器,用于springfox swagger2 for@Api运算

朱硕
2023-03-14

我有一个简单的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这样的注释是不可行的。默认情况下,我使用自定义序列化器(静态响应转换器也是自动生成的):

@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();
    }
}

我尝试过这种方法:

为swagger生成JSON模型时,Spingfox无法识别自定义序列化程序

也有这种方法,但我无法将其应用于springfox。

Swagger是可以覆盖自定义对象序列化

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序列化器

共有1个答案

栾瑞
2023-03-14

我第二个方法提供了这个答案,通过提供一个模型:

  • adirectModelSubstitute
  • a通用模型替代
  • 提供备用类型规则

这样做的目的是帮助springfox模式推理引擎推断它无法推断的内容。使用序列化器对jackson是不透明的,因此对springfox也是如此。这是因为通过检查序列化器的实现很难知道特定类型是如何通过线路序列化/反序列化的。

 类似资料:
  • 问题内容: 有没有一种方法/库可以让我像GSON自定义序列化程序一样自定义JSON序列化? 这是我想要得到的: 此对象: KeyValuePair(“ Age”,10)myAge 通常会像 “ myAge”:{“ Key”:“ Age”,“ Value”:10} 同时我希望它进行序列化,例如: “年龄”:10 。有任何想法吗? 问题答案: 首先,我建议使用newton json dll。 其次,您

  • 问题内容: 我的代码结构如下。 和 基本上我正在扫描网站以获取统计信息,例如标题标签,重复标题等。 我正在使用JQuery并向Web服务进行AJAX调用并检索url统计信息,而该过程正在运行以显示到目前为止收集的用户url统计信息,因为扫描大型网站需要花费大量时间。因此,每隔5秒,我就会从服务器检索统计信息。现在的问题是我需要在扫描处理完成时(而不是更新期间)最后发送所有List变量数据。现在发生

  • 问题内容: 我正在尝试创建将影响序列化值的自定义杰克逊注释。 含义: 现在序列化对象X(10)将导致: 我该如何实现? 问题答案: 结果:

  • 问题内容: 我在使用Gson解析JSON响应时遇到问题。 JSON字串: 我有这两个课程: 但是当使用Gson解析这个时我有一个异常。我知道这是因为响应数组的第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决它吗? 问题答案: 您必须编写一个 自定义反序列化器 。我会做这样的事情: 首先,您需要包括一个新的类,而不是已有的两个类: 然后,您需要一个自定义解串器,类似于以下内容: 然后,

  • 问题内容: 根据这个答案:http://codingdict.com/questions/137507 我写了这样的序列化器: 如果注释存在且字段为,则女巫应该写字符串“ N / A” 。但是仅对非空字段调用方法。 另外,我尝试致电: 通过这样的实现: 但是没有结果。 如何以这种方式处理空字段? 更新资料 根据讨论:https : //github.com/FasterXML/jackson- d

  • 根据这个答案:https://stackoverflow.com/a/43342675/5810648 我编写了这样的序列化程序: 如果注释存在并且字段为,则Witch应该编写字符串“N/A”。但是方法仅对非空字段调用。 此外,我还尝试调用setNullValueSerializer: 有了这样的实施: 但没有结果。 如何以这种方式处理空字段? 使现代化 根据讨论:https://github.c