jackson映射字符串或简单字符串列表

我试图从API中获取一些Json并将它们解析为一些POJO以与它们一起工作但我有这种情况,我可以获得一个键的简单字符串或字符串的数组列表。

Json看起来像这样:

{ "offerDisplayCategoryMapping": [ { "offerKey": "EUICC_BASE_ACTIVATION_V01", "categoriesKeys": { "categoryKey": "Included" } }, { "offerKey": "EUICC_BASE_ACTIVATION_V02", "categoriesKeys": { "categoryKey": "Included" } }, { "offerKey": "EUICC_BASE_ACTIVATION_V03", "categoriesKeys": { "categoryKey": [ "Option", "Included" ] } }] } 

我正在使用Spring Rest从API中获取结果。 我创建了一个POJO,表示使用List定义categoryKey ,在我的RestTemplate我定义了一个ObjectMapper ,我在其中为简单字符串的情况启用了DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY但这不起作用!!

有什么建议么?

除了已经提到的全局配置之外,还可以在单​​个属性上支持此function:

 public class Container { @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) // ... could also add Feature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED public List tags; } 

我在Spring之外只用jackson尝试了这个,它按预期工作:

 ObjectMapper mapper = new ObjectMapper(); mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); 

请注意, RestTemplate使用自己的ObjectMapper注册MappingJacksonHttpMessageConverter 。 检查此答案以了解如何配置此ObjectMapper

因为它是一个键列表,它将工作。 如果in case属性具有单个值而不是如下所示,则DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY将确保将单个属性反序列化为数组

 { "CategoriesKeys":{ "categoryKey":{ "keys":"1" } } } @JsonRootName("CategoriesKeys") protected static class CategoriesKeys{ private CategoryKey categoryKey; //getters and setters } protected static class CategoryKey{ private List keys; //getters and setters } TestClass: ObjectMapper mapper=new ObjectMapper(); mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); Output: {"CategoriesKeys":{"categoryKey":{"keys":["1"]}}}