【问题标题】:JSON property not deserializing from a different name in Spring BootJSON 属性未从 Spring Boot 中的不同名称反序列化
【发布时间】:2020-06-18 07:54:07
【问题描述】:

这是我的 POJO:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.cloud.Timestamp;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Course {

    private String code;

    private int credits;

    private int id;

    @JsonProperty("last_updated")
    private Timestamp lastUpdated;

    private String name;

    private String prerequisites;

    private String restrictions;

    private Seats seats;

    private Seats waitlist;
}

我正在从 Firestore 读取数据,这些数据被隐式映射到此类。

显着的区别是 last_updated 在 Firestore 中有一个下划线:

但我希望 JSON 反序列化为不带下划线的 lastUpdated。我认为这就是@JsonProperty 的意义所在,但这里发生的只是我得到了一个空值:

以及 Spring Boot 中的以下日志记录:

2020-06-18 03:44:36.852  WARN 5200 --- [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper    : No setter/field for last_updated found on class ....dto.Course
2020-06-18 03:44:36.852  WARN 5200 --- [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper    : No setter/field for last_updated found on class ....dto.Course
2020-06-18 03:44:36.853  WARN 5200 --- [nio-8080-exec-1] c.g.cloud.firestore.CustomClassMapper    : No setter/field for last_updated found on class ....dto.Course

我已对其进行调试并确认在 Java 世界中,lastUpdated 始终为空。

如何让我的 POJO 将 last_updated 反序列化为 lastUpdated POJO 字段,而无需将 POJO 属性重命名为 last_updated(这可行,但违反了许多 linting 原则)?

【问题讨论】:

    标签: json spring spring-boot google-cloud-firestore jackson


    【解决方案1】:

    你可以通过这样写你的属性来获得

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ")
    private Date createdDate;
    

    Date 是一个很好的字段类型。您可以使用 ObjectMapper.setDateFormat 轻松使 JSON 可解析:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm a z");
    myObjectMapper.setDateFormat(df);
    

    【讨论】:

    • 这不会改变错误信息或任何东西,对不起
    猜你喜欢
    • 2021-07-22
    • 2012-01-23
    • 2013-10-09
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多