java - joda LocalTime的Jackson连载

标签 java serialization spring-boot jackson jodatime

我将 Spring Boot 与 JPA 和 Jodatime 结合使用。

目前我有一个像这样注释的模型属性:

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

序列化后,JSON 将变为:

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

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

{
  "startTime": "12:00"
}

我试过添加那个@JsonFormat注解,但它似乎不起作用。

最佳答案

你可以这样做:

@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>

关于java - joda LocalTime的Jackson连载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415955/

相关文章:

Java:允许字符串中包含空格和标点符号

java - 为什么 Hive 和 HiveServer2 需要 mapred.InputFormat?

json - 将json转换为数据表vb

tomcat - Spring Boot 排除 Tomcat 依赖

java - 通过命令行运行基于组的测试时,不遵守 TestNG 注释

java - 使用 selenium Web Driver 中的 Robot 类上传功能

python - 如何从 Python 中的文件/流中懒惰地读取多个 JSON 值?

c# - 为什么类不需要标记为要序列化的 [DataContract] 或 [Serializable] 属性?

spring - 启动时调用 DefaultConversionService.addCollectionConverters() 时出现 IllegalAccessError

java - Spring Boot - 如何使用 cors 和 spring security 修复 session bean