我在yml文件中有一个变量
startDate:
type:string
format:date
我正在使用 swagger-generater 从 yml 生成 java 代码。
它生成一个 startDate 变量,如下所示
@JsonProperty("startDate")
private LocalDate startDate = null;
但我需要如下
@JsonProperty("startDate")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate startDate = null;
有人可以帮助我吗?
这里的问题是您尝试使用@JsonFormat
序列化Java 8
LocalDate
而不使用正确的杰克逊模块/依赖项。如果你看一下注释文档,它说;
常见用途包括在替代表示之间进行选择 -- 对于 例如,是否将日期序列化为数字(Java 时间戳( 或字符串(例如 ISO-8601 兼容时间值(以及 使用 pattern(( 属性配置确切的详细信息。
https://fasterxml.github.io/jackson-annotations/javadoc/2.8/com/fasterxml/jackson/annotation/JsonFormat.html
swagger codegen
项目中没有关于如何指定特定于语言的配置选项的适当文档,我只在以下票证中看到这些配置选项;
https://github.com/swagger-api/swagger-codegen/issues/7795
根据该问题,您可以强制 Swagger 代码生成使用 java8
dateLibrary
.
你可以尝试用这种方式去萨里化:
ObjectMapper objectMapper = new ObjectMapper();
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.setDateFormat(df);
JSONObject jsonObject=new JSONObject(new Oferta().fechaInicio(new Date()));
String json="";
try{
json=objectMapper.writeValueAsString(new Oferta().fechaInicio(new Date()).fechaAceptacion("15/554/20"));
jsonObject=new JSONObject(json);
}catch (Exception e){
}
public class Oferta {
@JsonProperty("fechaInicio")
private Date fechaInicio = null;
@JsonProperty("fechaAceptacion")
private String fechaAceptacion = null;
}
添加x-field-extra-annotation
以添加所需的任何注释。文档在这里: https://openapi-generator.tech/docs/generators/java
startDate:
type:string
format:date
x-field-extra-annotation: '@com.fasterxml.jackson.annotation.JsonFormat(shape = com.fasterxml.jackson.annotation.JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")'
然后生成的模型类将具有注释JsonFormat