Как использовать класс JacksonJSONProvider ObjectMapper () в Java? - PullRequest
1 голос
/ 17 июня 2019

Я хочу deserialize объект OffsetDateTime JSON в ISO8601 формате

Я сгенерировал JacksonJSONProvider классы через swagger-code-gen, но я не могу понять, как использовать класс ...

Вот код класса


@Provider
@Produces({MediaType.APPLICATION_JSON})
public class JacksonJsonProvider extends JacksonJaxbJsonProvider {

    public JacksonJsonProvider() {

        ObjectMapper objectMapper = new ObjectMapper()
                .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
                .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
                .registerModule(new JavaTimeModule())
                .setDateFormat(new RFC3339DateFormat());

        setMapper(objectMapper);
    }
}

Фактический результат

"offset": {
            "totalSeconds": 19800,
            "id": "+05:30",
            "rules": {
                "transitions": [],
                "transitionRules": [],
                "fixedOffset": true
            }
        },
        "year": 2006,
        "month": "NOVEMBER",
        "monthValue": 11,
        "dayOfMonth": 8,
        "hour": 15,
        "minute": 57,
        "second": 0,
        "nano": 0,
        "dayOfWeek": "WEDNESDAY",
        "dayOfYear": 312

Ожидаемый результат

"2006-11-08T21:27:00.000+0000"

1 Ответ

1 голос
/ 17 июня 2019

Ваш ожидаемый результат

"2006-11-08T21: 27: 00.000 + 0000"

не в формате JSON вообще, поэтому форматер JSON будетне поможет тебе.Чтобы разобрать OffsetDateTime в нужный вам формат, вам нужно использовать DateTimeFormatter class.Однако, если у вас есть класс, имеющий член типа OffsetDateTime, и вы хотите сериализовать весь ваш класс в JSON, то вот ссылка на вопрос, который дает правильный ответ: Spring Data JPA - формат ZonedDateTimeдля сериализации JSON .В основном решение будет выглядеть как

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss.SSSZ", locale = "en")
    private OffsetDateTime myTime;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...