杰克逊序列化joda LocalTime

时间:2016-04-05 02:13:43

标签: java serialization spring-boot jackson jodatime

我在JPA和Jodatime中使用Spring Boot。

目前我的模型属性注释如下:

>>> from hdfs3 import HDFileSystem
>>> hdfs = HDFileSystem(host='localhost', port=8020)
>>> hdfs.ls('/user/data')
>>> hdfs.put('local-file.txt', '/user/data/remote-file.txt')
>>> hdfs.cp('/user/data/file.txt', '/user2/data')

序列化后,JSON正在变为:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalTime")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
private LocalTime startTime;

我想知道是否有办法将该属性序列化为:

{
"startTime" : {
      "hourOfDay" : 12,
      "minuteOfHour" : 0,
      "secondOfMinute" : 0,
      "millisOfSecond" : 0,
      "chronology" : {
        "zone" : {
          "fixed" : true,
          "id" : "UTC"
        }
      }
}

我试图将那个{ "startTime": "12:00" } 注释,但它似乎不起作用。

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

@JsonSerialize(using = MyLocalTimeSerializer.class)
private LocalTime startTime;

然后创建MyLocalTimeSerializer.class:

public class MyLocalTimeSerializer extends JsonSerializer<LocalTime> {

    @Override
    public void serialize(
            LocalTime time, 
            JsonGenerator gen, 
            SerializerProvider arg2) throws IOException, JsonProcessingException {
        gen.writeString(time.toString("HH:mm"));
    }

}

这需要jackson-databind库。

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.databind-version}</version>
    </dependency>