Похоже, что вы ищете функцию десериализации ACCEPT_SINGLE_VALUE_AS_ARRAY
.
Функция, которая определяет, допустимо ли принудительно использовать значения без массивов (в JSON) для работыс типами коллекции Java (массивы, java.util.Collection
).Если этот параметр включен, десериализаторы коллекций будут пытаться обрабатывать значения, не относящиеся к массиву, как если бы они имели «неявное» окружение массива JSON.Эта функция предназначена для использования в целях совместимости / взаимодействия, для работы с пакетами (такими как конвертеры XML-в-JSON), которые исключают массив JSON в тех случаях, когда в массиве имеется только один элемент.
По умолчанию эта функция отключена.
Ее можно включить либо в ObjectMapper
:
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
, либо с помощью аннотации @JsonFormat
:
@JsonFormat(with = Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Foo> oneOrMany;
Для иллюстрации рассмотрим следующие документы JSON:
{
"oneOrMany": [
{
"value": "one"
},
{
"value": "two"
}
]
}
{
"oneOrMany": {
"value": "one"
}
}
Может быть десериализовано в следующие классы:
@Data
public class Foo {
private List<Bar> oneOrMany;
}
@Data
public class Bar {
private String value;
}
Просто убедитесь, что функция включена в вашем ObjectMapper
или поле помечено @JsonFormat(with = Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
.
И если вы ищете эквивалентную функцию для сериализации, обратитесь к WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED
.