Джексон @JsonFormat конвертирует дату с неверным часовым поясом - PullRequest
1 голос
/ 28 марта 2019

У меня есть значение, поступающее из полезной нагрузки JSON:

"callStartTime" : "2019-03-27 13:00:00"

Entity.java

@JsonProperty("callStartTime")
@Column(name = "call_start_dt", nullable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", lenient = OptBoolean.FALSE)
private Date callStartTime;

Когда я печатаю его на консоли, оно говорит:

Wed Mar 27 08:00:00 CDT 2019

Я хотел быть таким же, как в json.Как я могу это исправить?

Я просто беру дату из json и записываю ее в mysql db в столбце datetime.

Ответы [ 3 ]

1 голос
/ 28 марта 2019

java.util.Date не захватывает данные часового пояса. Он знает только количество миллис с эпохи.

Вы можете попробовать использовать один из модулей в jackson-modules-java8 и десериализовать его в экземпляр ZonedDateTime , который учитывает часовой пояс.

РЕДАКТИРОВАТЬ: попробуйте это в качестве основы для того, чтобы заставить его работать:

public class SoTest {
    public static void main(String[] args) throws Exception {
        ObjectMapper om = new ObjectMapper().registerModule(new ParameterNamesModule())
                                            .registerModule(new JavaTimeModule());

        String s = "{\"callStartTime\" : \"2019-03-27T13:00:00Z\" }";

        MyType mt = om.readValue(s, MyType.class);

        System.out.println(mt.getCallStartTime());
    }
}

class MyType {
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssX", lenient = OptBoolean.FALSE)
    private ZonedDateTime callStartTime;

    public ZonedDateTime getCallStartTime() {
        return callStartTime;
    }

    public void setCallStartTime(ZonedDateTime date) {
        this.callStartTime = date;
    }

}
1 голос
/ 28 марта 2019

Попробуйте это

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date callStartTime;
0 голосов
/ 28 марта 2019

Простое решение: Я решил это, изменив тип данных на String, что завершает мою задачу по получению значения, получаемого из полезной нагрузки JSON. Использование Date и других типов данных преобразовывало значение в другой часовой пояс.

@JsonProperty("callStartTime")
@Column(name = "call_start_dt", nullable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", lenient = OptBoolean.FALSE)
private **String** callStartTime;
...