我正在使用 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?
我实现您要求的唯一方法是实施解决方法。它包括将一个random字符串分配给示例字段,然后在 JSON 序列化过程中replace为 null。
更详细:
使用“NULLABLE_VALUE”对示例字段进行赋值
编写以下类:
@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。