Arhn - архитектура программирования

Как сериализовать и десериализовать Java Enums как объекты JSON с помощью Jackson

Учитывая перечисление:

public enum CarStatus {
    NEW("Right off the lot"),
    USED("Has had several owners"),
    ANTIQUE("Over 25 years old");

    public String description;

    public CarStatus(String description) {
        this.description = description;
    }
}

Как мы можем настроить его, чтобы Джексон мог сериализовать и десериализовать экземпляр этого Enum в следующем формате и из него.

{
    "name": "NEW",
    "description": "Right off the lot"
}

По умолчанию перечисления просто сериализуются в строки. Например "NEW".

05.04.2016

Ответы:


1
  1. Используйте аннотацию JsonFormat, чтобы заставить Джексона отменить перечисление как объект JSON.
  2. Создайте статический конструктор, принимающий JsonNode, и аннотируйте указанный конструктор @JsonCreator.
  3. Создайте геттер для имени перечисления.

Вот пример.

// 1
@JsonFormat(shape = JsonFormat.Shape.Object)
public enum CarStatus {
    NEW("Right off the lot"),
    USED("Has had several owners"),
    ANTIQUE("Over 25 years old");

    public String description;

    public CarStatus(String description) {
        this.description = description;
    }

    // 2
    @JsonCreator
    public static CarStatus fromNode(JsonNode node) {
        if (!node.has("name"))
            return null;

        String name = node.get("name").asText();

        return CarStatus.valueOf(name);
    }

    // 3
    @JsonProperty
    public String getName() {
        return name();
    }
}
05.04.2016
  • Какую версию Java вы используете? 1.8, похоже, не допускает общедоступных статических конструкторов. 13.04.2016
  • Странный. Я использую Java 1.8, и он позволяет использовать общедоступные статические конструкторы для перечислений. 13.04.2016
  • ошибка копирования вставки? Попробуйте следующее: '@JsonCreator public static CarStatus fromNode (узел JsonNode) {' 27.04.2016
  • Хороший улов. Обновленный пример. 27.04.2016
  • @ncphillips в последней версии JsonFormat.Shape.Object следует писать как JsonFormat.Shape.OBJECT (OBJECT должен быть написан заглавными буквами), я думаю? 13.06.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..