【问题标题】:Converting JSON long to a date in Java via Jackson通过 Jackson 将 JSON long 转换为 Java 中的日期
【发布时间】:2022-10-08 00:17:42
【问题描述】:

我有一个 JSON 数据对象类,如下所示:

    public class Plugins {
      
      private String id;
      private String name;
    
      @JsonProperty("created_at")
      private long createdAt; 
}

其中createdAt 是创建日期的长时间戳。我使用这个类来备份 Jackson ObjectMapper 对象,该对象解析来自外部 API 调用的 JSON 数据。我想知道是否可以让 Jackson 自动将 created_at 转换为可读的日期格式并以 StringDate 风格存储在 Java 中?

【问题讨论】:

  • created_at 将以哪种形式出现?你能分享一个 JSON 样本吗?
  • @AlexanderIvanchenko 简单的长时间戳,比如"created_at": 1665148545
  • 这些是从纪元开始的几秒钟?您想以 UTC 格式存储日期时间还是针对特定时区进行调整?

标签: java json jackson


【解决方案1】:

在杰克逊中使用自定义反序列化器

您可以从长到字符串或日期通过使用自定义解串器.此自定义反序列化器会将 json 中的 long 值转换为定义的日期格式(日期或字符串)。

在这里,我将纪元值转换为日期形式的字符串。

您需要使用以下需要自定义反序列化的注释。

@JsonDeserialize(using = CustomDateSerializer.class)

请在下面找到代码:

插件.java

public class Plugins {

    private String id;
    private String name;
    @JsonDeserialize(using = CustomDateSerializer.class)
    @JsonProperty("created_at")
    private String createdAt;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(String createdAt) {
        this.createdAt = createdAt;
    }

    @Override
    public String toString() {
        return "Plugins{" +
                "id='" + id + ''' +
                ", name='" + name + ''' +
                ", createdAt=" + createdAt +
                '}';
    }
}

CustomDateSerializer.java

public class CustomDateSerializer extends StdDeserializer<String> {

    public static String pattern = "dd MMM yyyy hh:mm:ss";

    public CustomDateSerializer() {
        this(StdDeserializer.class);
    }

    protected CustomDateSerializer(Class<?> c) {
        super(c);
    }

    @Override
    public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        return formatter.format(new Date(jsonParser.getLongValue()));
    }

}

测试.java

public class Test {
    public static void main(String[] args) throws JsonProcessingException {
        String json = """
                {
                "id":"1",
                "name":"test",
                "created_at":1665158083000
                }
                """;
        ObjectMapper mapper = new ObjectMapper();
        Plugins test = mapper.readValue(json,Plugins.class);
        System.out.println(test);
    }
}

输出:

Plugins{id='1', name='test', createdAt=07 Oct 2022 09:24:43}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多