我想使用java.util.Date字段生成类的JSON 模式。 对于类型为Date的字段,我得到:
" fieldName的" :{ "输入":"整数", "格式":" UTC_MILLISEC" }
我想要的是:
" fieldName的" :{" type":" string"," format":" date-time" }
我希望这个配置对于所有POJOS都是全局的,而不仅仅是针对特定的POJO。 因此,对特定类的注释对我没有帮助。
谢谢!
答案 0 :(得分:5)
这只是the Dennis's answer示例SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
实际考虑到the Jackson schema generator的一个示例。
public class JacksonSchema1 {
public static class Bean {
public String name;
public Date date;
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
mapper.acceptJsonFormatVisitor(mapper.constructType(Bean.class), visitor);
JsonSchema jsonSchema = visitor.finalSchema();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema));
}
}
输出:
{
"type" : "object",
"properties" : {
"name" : {
"type" : "string"
},
"date" : {
"type" : "string",
"format" : "DATE_TIME"
}
}
}
答案 1 :(得分:4)
如果您只想将日期输出为字符串,则应禁用SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
实例上的配置OjectMapper
。然后,每个转换的Date对象都将写为字符串。有关序列化功能的详细信息,请参阅this link。
答案 2 :(得分:2)
杰克逊有一个漂亮的自定义JsonSerializer
课程,你可以扩展。您基本上只需创建一个扩展JsonSerializer<Date>
并覆盖serialize
方法的新类。
以下是一个例子。
public class DateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("format", "date-time");
jgen.writeStringField("type", "string");
jgen.writeEndObject();
}
}
接下来,我们需要使用正在使用的ObjectMapper
注册序列化程序。
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Date.class, new DateSerializer());
mapper.registerModule(module);
这应该会给你正在寻找的JsonSerialization。您唯一需要做的就是修改序列化程序,以便序列化正确的值。