From ef88b1c6db76c8a5b818a80ff75a91eba2ed06cc Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Thu, 26 Sep 2024 13:22:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20Json=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B2=20Java=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D0=B8=20Jac?= =?UTF-8?q?kson.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...е Json из коллекции в Java объект при помощи Jackson.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 dev/snippet/Преобразование Json из коллекции в Java объект при помощи Jackson.md diff --git a/dev/snippet/Преобразование Json из коллекции в Java объект при помощи Jackson.md b/dev/snippet/Преобразование Json из коллекции в Java объект при помощи Jackson.md new file mode 100644 index 00000000..f1611562 --- /dev/null +++ b/dev/snippet/Преобразование Json из коллекции в Java объект при помощи Jackson.md @@ -0,0 +1,81 @@ +--- +aliases: +tags: + - maturity/🌱 +date: 2024-09-14 +zero-link: + - "[[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]" +parents: + - "[[../../../../knowledge/dev/java/other/Jackson|Jackson]]" +linked: +--- +Преобразовать Json строку в java коллекцию через `ObjectMapper` не получится, так как `ObjectMapper` не знает какую коллекцию нужно использовать и какой внутри нее тип данных. + +Предварительно необходимо описать структуру вашей коллекции используя `ParameterizedType`. + +Пример для `List` и `Map`: +```java {9,14} +import java.lang.reflect.ParameterizedType; + +@UtilityClass +public class CollectionTypes { + + public static final Type LIST_STRINGS = new ParameterizedType() { + @Override + public Type[] getActualTypeArguments() { + return new Type[]{String.class}; + } + + @Override + public Type getRawType() { + return List.class; + } + + @Override + public Type getOwnerType() { + return null; + } + }; + + // Map + public static final Type MAP_LONG_DOUBLE = new ParameterizedType() { + @Override + public Type[] getActualTypeArguments() { + return new Type[]{Long.class, Double.class}; + } + + @Override + public Type getRawType() { + return Map.class; + } + + @Override + public Type getOwnerType() { + return null; + } + }; + +} +``` + +Метод `getActualTypeArguments()` возвращает типы данных, которые используются в коллекции, а `getRawType()` описывает коллекцию. + +Пример использования: +```java +import com.fasterxml.jackson.databind.JavaType; + +... + +String jsonValue = ... +JavaType javaType = JsonUtils.OBJECT_MAPPER.constructType(CollectionTypes.LIST_STRINGS); +List resultList = finalJsonUtils.OBJECT_MAPPER.readValue(jsonValue, javaType); +``` +*** +## Мета информация +**Область**:: [[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]] +**Родитель**:: [[../../../../knowledge/dev/java/other/Jackson|Jackson]] +**Источник**:: +**Создана**:: [[2024-09-14]] +**Автор**:: +### Дополнительные материалы +- \ No newline at end of file