Преобразовать Json строку в java коллекцию через ObjectMapper
не получится, так как ObjectMapper
не знает какую коллекцию нужно использовать и какой внутри нее тип данных.
Предварительно необходимо описать структуру вашей коллекции используя ParameterizedType
.
Пример для List
и Map
:
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<Long, Double>
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()
описывает коллекцию.
Пример использования:
import com.fasterxml.jackson.databind.JavaType;
...
String jsonValue = ...
JavaType javaType = JsonUtils.OBJECT_MAPPER.constructType(CollectionTypes.LIST_STRINGS);
List<String> resultList = finalJsonUtils.OBJECT_MAPPER.readValue(jsonValue, javaType);
Мета информация
Область:: 00 Снипеты для Java
Родитель:: Jackson
Источник::
Создана:: 2024-09-14
Автор::