Адаптер настраивает создание и сериализацию пользовательских объектов путем реализации интерфейса 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, являются их собственными. |