Polymorphic Jackson反序列化:获取字符串或字符串数​​组

时间:2015-03-03 21:20:26

标签: java json jackson

除了我使用Java / Jackson而不是C#之外,我的问题与此问题完全相同:

In C# how can I deserialize this json when one field might be a string or an array of strings?

我的输入JSON可以是:

{ "foo": "a string" }

或者这个:

{ "foo": ["array", "of", "strings" ] }

我的班级看起来像这样:

class MyClass {
    public List<String> foo;
}

如果输入包含单个字符串,我希望它成为列表中的第一个条目。

如何使用Jackson反序列化foo?我可以写一个自定义的反序列化器,我以前做过,但我认为可能有一种更简单的方法。

1 个答案:

答案 0 :(得分:1)

有一项名为ACCEPT_SINGLE_VALUE_AS_ARRAY的功能,默认情况下已关闭但您可以将其启用:

objectMapper = new ObjectMapper()
        .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

您也可以按使用情况启用它:

class SomeClass {

  @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
  private List<String> items;
  // ...
}