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