Статьи

Познакомьтесь с Custom De / Serializer: серия обзоров связывания JSON

Наиболее продвинутый способ настройки привязки JSON — использование пользовательских сериализаторов и десериализаторов.

Сериализаторы и десериализаторы JSON-B — это самый низкий уровень настройки, обеспечивающий доступ к анализаторам и генераторам JSON Processing.

Пользовательский сериализатор должен реализовывать интерфейс JsonbSerializer и предоставлять логику для метода serialise () . Этот код показывает простой пример того, как настроить сериализацию объекта Book .

JsonGenerator используется для создания свойства документа JSON по свойству. Значение свойства id фиксировано, а имя автора льстит свойствам firstName и lastName .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class BookSerializer implements JsonbSerializer<Book> {
 
    @Override
    public void serialize(Book book,
             JsonGenerator generator, SerializationContext ctx) {
        generator.writeStartObject();
        generator.write("id", "QWE-123-RTS");
        generator.write("title", book.getTitle());
        generator.write("firstName", book.getAuthor().split(" ")[0]);
        generator.write("lastName", book.getAuthor().split(" ")[1]);
        generator.writeEnd();
    }
 
}

Операция десериализации настраивается путем реализации интерфейса JsonbDeserializer и предоставления логики для метода deserialize () .

Этот код показывает пример, который извлекает только идентификатор Книги из документа JSON.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
public class BookDeserializer implements JsonbDeserializer<String> {
    @Override
    public String deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
        while (parser.hasNext()) {
            JsonParser.Event event = parser.next();
            if (event == JsonParser.Event.KEY_NAME) {
                String keyName = parser.getString();
                if (keyName.equals("id")) {
                    return ctx.deserialize(String.class, parser);
                }
            }
            parser.next();
        }
        return "";
    }
}

Экземпляры сериализатора и десериализатора регистрируются в JsonbConfig через соответствующие. withDeserializers () или. withSerializers () метод, как показано здесь.

1
2
3
JsonbConfig config = new JsonbConfig()
    .withDeserializers(new BookDeserializer())
    .withSerializers(new BookSerializer());

Кроме того , тип можно аннотировать с помощью @JsonbTypeSerializer или @JsonbTypeDeserializer и передавать имя класса соответствующего класса настройки.

1
2
@JsonbTypeDeserializer(BookDeserializer.class)
public class Booklet{}

Округлять

Итак, сегодня мы увидели некоторые интересные новые изменения в том, как Java EE обрабатывает JSON.

JSON Processing теперь соответствует новейшим интернет-стандартам, и дизайнеры JSON-B решили стандартизировать способ, которым разработчики преобразуют объекты Java в документы JSON и наоборот.

Если API и функции, которые вы видели до сих пор, кажутся вам знакомыми, это намеренно: API стандартизирует методы сериализации и десериализации, которые должны быть уже знакомы большинству разработчиков Java.

Две модели настройки: время выполнения и время компиляции предлагают очень гибкий и интуитивно понятный способ точной настройки API.

Аннотации с самоописанием и методы настройки способствуют повышению производительности и упрощают разработку.

Тем не менее, легко достигаются низкоуровневые манипуляции с операциями сериализации и десериализации и расширенная настройка.

Об API связывания JSON можно узнать гораздо больше, чем то, о чем я говорю в этих постах.

Опубликовано на Java Code Geeks с разрешения Алекса Тидома, партнера нашей программы JCG. См. Оригинальную статью здесь: Познакомьтесь с Custom De / Serializer: Серия JSON Binding Overview

Мнения, высказанные участниками Java Code Geeks, являются их собственными.