Джексон DateFormatter установить часовой пояс без изменения времени - PullRequest
0 голосов
/ 17 сентября 2018

У меня проблема с Джексоном. У меня есть дата в базе данных в следующем формате: 2018-01-01 13: 00: 00

Я преобразовываю запись базы данных в объект «Дата».

Теперь я хочу, чтобы картограф Джексона распечатал дату в следующем формате: 2018-01-01T13: 00: 00,000 + 0200

Теперь у меня есть следующий код, в котором я настроил свой объектный картограф

private static ObjectMapper init() {
    ObjectMapper mapper = new ObjectMapper();

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM dd'T'HH:mm:ss.SSSZ");
    dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
    mapper.setDateFormat(dateFormat);
    mapper.registerModule(new JavaTimeModule());
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    return mapper;
}

Теперь проблема в том, что дата распечатывается так: 2018-01-01T15: 00: 00,000 + 0200

При форматировании даты и добавлении информации о часовом поясе вычисляется новое время. Все мои даты используют часовой пояс "Европа / Берлин", но я не сохраняю их с этой информацией в базе данных.

Есть ли способ добавить информацию о часовом поясе без изменения времени?

Привет

1 Ответ

0 голосов
/ 18 сентября 2018

Решением было использование пользовательского класса DateFormat, где я могу обрабатывать форматирование.

Очень важно: Вы должны реализовать метод «клон». Если вы используете Eclipse, он показывает только ошибку для отсутствующего формата и метода разбора. Метод клона отсутствовал, и я получил некоторые исключения nullpointer в классе DateFormat.

mapper.setDateFormat(JsonDateFormat);

public class JsonDateFormat extends DateFormat implements Serializable, Cloneable {

    @Override
    public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
        // TODO DO STUFF
        return toAppendTo;
    }

    @Override
    public Date parse(String source, ParsePosition pos) {
        // TODO DO STUFF
        return null;
    }

    @Override
    public Object clone() {
        return new JsonDateFormat();
    }

}
...