Проблема с форматированием LocalDateTime с библиотекой org. json - PullRequest
0 голосов
/ 24 января 2020

У меня проблема с сериализацией объекта в JSON с использованием библиотеки org.json.

В моем коде у меня есть:

String resultStr = new JSONObject(result).toString();

и в результате объект два поля типа LocalDateTime:

private LocalDateTime startDate;
private LocalDateTime stopDate;

В переменной resultStr Я получил дату в следующем формате:

2020-01-23T14:13:30.121205

Я хочу этот формат ISO:

2016-07-14T07:58:08.158Z

Я знаю, что в Джексоне есть аннотация @JsonFormat, но я не нашел ничего подобного в org.json. Как определить формат LocalDateTime в JSON строке с org.json?

1 Ответ

0 голосов
/ 26 января 2020

В JSON в Java, кажется, что поддержка форматирования даты / времени не так уж и велика.

Чтобы настроить форматирование поля LocalDateTime, мы можем используйте
1. @ JSONPropertyIgnore , чтобы игнорировать исходный получатель для сериализации
2. @ JSONPropertyName , чтобы аннотировать новый получатель с игнорируемым именем поля, которое возвращает требуемая строка даты в формате:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import org.json.JSONObject;
import org.json.JSONPropertyIgnore;
import org.json.JSONPropertyName;

public class CustomizeLocalDateTimeFormatInOrgJson {
    public static void main(String[] args) {
        Result result = new Result(LocalDateTime.now(), LocalDateTime.now());
        String resultStr = new JSONObject(result).toString();
        System.out.println(resultStr);
    }

    public static class Result {
        DateTimeFormatter customDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssS'Z'");
        private LocalDateTime startDate;

        @JSONPropertyIgnore
        public LocalDateTime getStartDate() {
            return startDate;
        }

        @JSONPropertyName("startDate")
        public String getStartDateString() {
            return customDateTimeFormat.format(startDate);
        }

        private LocalDateTime stopDate;

        @JSONPropertyIgnore
        public LocalDateTime getStopDate() {
            return stopDate;
        }

        @JSONPropertyName("stopDate")
        public String getStopDateString() {
            return customDateTimeFormat.format(stopDate);
        }

        public void setStopDate(LocalDateTime stopDate) {
            this.stopDate = stopDate;
        }

        public void setStartDate(LocalDateTime startDate) {
            this.startDate = startDate;
        }

        public Result(LocalDateTime startDate, LocalDateTime stopDate) {
            super();
            this.startDate = startDate;
            this.stopDate = stopDate;
        }
    }
}
...