如何在Springdoc-openapi中的模式示例中设置值null而不是“null”?

问题描述 投票:0回答:1

我正在使用 Springdoc-openapi 并有一个像这样的 dto:

@Schema(title = "Financial Conditions")
@JsonIgnoreProperties(ignoreUnknown = true)
public class CurrentFinancialConditions {
   
   @Schema(title = "Rate", example = "null")
   @JsonProperty("light")
   private String conditionsLight;

   @Schema(title = "Scores")
   private Scores scores;
}

它给了我 swagger-ui 中的结果:

"current_financial_conditions": {
  "scores": {
    "liquidity": "some example goes here",
    "profitability": "some example goes here",
  },
  "light": "null"
}

是否可以将生成的文档中的示例值从“null”更改为null?

swagger swagger-ui openapi springdoc springdoc-openapi-ui
1个回答
0
投票

我实现您要求的唯一方法是实施解决方法。它包括将一个random字符串分配给示例字段,然后在 JSON 序列化过程中replace为 null。

更详细:

  1. 使用“NULLABLE_VALUE”对示例字段进行赋值

  2. 编写以下类:

     @Component
     @Primary
     public class CustomJsonSerializer extends JsonSerializer {
         ObjectMapper objectMapper = new ObjectMapper();    
    
         public CustomJsonSerializer(List<JacksonModuleRegistrar> modules) {
             super(modules);
         }
    
        @Override
        public Json toJson(Object toSerialize) {
             if (toSerialize instanceof Swagger) {
             String json = getJsonString((Swagger)toSerialize);
             json = json.replace("\"NULLABLE_VALUE\"", "null");
             return new Json(json);
         }
    
         return super.toJson(toSerialize);
     }
    
     private String getJsonString(Swagger toSerialize) {
         return super.toJson(toSerialize).value();
     }
    }
    

这种方法之所以有效,是因为 springfox 在 Swagger2ControllerWebMvc 类中使用 JsonSerializer(其中 mappes /v2/api-docs URL)。 通过扩展JsonSerializer和注释使用@Component和@Primary子类,你告诉Spring实例化你的子类而不是上层类。 所以 springfox 将使用您的自定义序列化。

请注意,您可以完全访问 Swagger 对象。这意味着您可以根据需要编辑 api-docs JSON。

© www.soinside.com 2019 - 2024. All rights reserved.