Статьи

Познакомьтесь с адаптерами: обзорная серия JSON Binding

Адаптер настраивает создание и сериализацию пользовательских объектов путем реализации интерфейса JsonbAdapter . Методы adaptToJson () и adaptFromJson () перезаписываются логикой, выполняющей операции сериализации и десериализации.

Следующая статья о наиболее продвинутом способе настройки JSON-B с помощью пользовательских сериализаторов и десериализаторов.

В данном примере реализации метод adaptToJson () был реализован с помощью кода, который преобразует объект Booklet в JsonObject с использованием компоновщика объектов JSON из API обработки JSON. Метод adaptFromJson () создает объект Booklet из экземпляра JsonObject .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
public class BookletAdapter implements JsonbAdapter<Booklet, JsonObject> {
 
    @Override
    public JsonObject adaptToJson(Booklet booklet) {
        return Json.createObjectBuilder()
           .add("title", booklet.getTitle())
           .add("firstName", booklet.getAuthor().getFirstName())
           .add("lastName", booklet.getAuthor().getLastName())
           .build();
    }
 
    @Override
    public Booklet adaptFromJson(JsonObject json) {
        Booklet booklet = new Booklet(json.getString("title"),
        new Author(json.getString("firstName"),
        json.getString("lastName")));
        return booklet;
    }
}

Как видите, метод adaptToJson () выравнивает объект Author до двух свойств: firstName и lastName . Метод adaptFromJson () восстанавливает объект Author и выводит экземпляр Booklet .

JsonbAdapter очень гибок и может использоваться для настройки сериализации и десериализации отдельных полей, а также целых объектов .

Это достигается путем пометки поля, метода или класса, которые должны быть настроены, с помощью аннотации JsonbTypeAdapter и передачи ему имени класса JsonbAdapter для использования.

Пример реализации показан здесь. Поле firstName помечается аннотацией JsonbTypeAdapter и классом FirstNameAdapter, указанным в качестве адаптера.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
public class Author {
    @JsonbTypeAdapter(FirstNameAdapter.class)
    private String firstName;
}
 
public class FirstNameAdapter implements JsonbAdapter<String, JsonValue> {
 
    @Override
    public JsonValue adaptToJson(String fullName) {
        return Json.createValue(fullName.subSequence(0, 1).toString());
    }
 
    @Override
    public String adaptFromJson(JsonValue json) {
        return json.toString();
    }
 
}

И, наконец, самый продвинутый способ настройки JSON-B с помощью пользовательских сериализаторов и десериализаторов.

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

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

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