JSON свойство не десериализуется с другого имени в Spring Boot - PullRequest
0 голосов
/ 18 июня 2020

Вот мой 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:

enter image description here

, но я хочу, чтобы JSON десериализовался до lastUpdated без подчеркивания. Я думал, что это была точка @JsonProperty, но все, что здесь происходит, это то, что я возвращаю нулевое значение:

enter image description here

и следующее ведение журнала в 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 всегда имеет значение null.

Как я могу получить свой POJO в десериализовать last_updated в поле lastUpdated POJO без необходимости переименовывать свойство POJO в last_updated (что работает, но нарушает многие принципы линтинга)?

1 Ответ

0 голосов
/ 18 июня 2020

вы можете получить, написав свое свойство следующим образом.

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

Date - отличный тип поля для этого. Вы можете легко сделать синтаксический анализ JSON, используя ObjectMapper.setDateFormat:

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