多态杰克逊反序列化:获取字符串或字符串数​​组

ccl*_*eve 6 java json jackson

我的问题与这个问题几乎相同,只是我使用的是 Java/Jackson 而不是 C#:

在 C# 中,当一个字段可能是字符串或字符串数​​组时,如何反序列化此 json?

我的输入 JSON 可以是这样的:

{ "foo": "a string" }
Run Code Online (Sandbox Code Playgroud)

或这个:

{ "foo": ["array", "of", "strings" ] }
Run Code Online (Sandbox Code Playgroud)

我的课是这样的:

class MyClass {
    public List<String> foo;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ali*_*ian 6

有一个名为ACCEPT_SINGLE_VALUE_AS_ARRAY的功能,默认情况下处于关闭状态,但您可以将其打开:

objectMapper = new ObjectMapper()
        .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Run Code Online (Sandbox Code Playgroud)

您还可以根据情况打开它:

class SomeClass {

  @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
  private List<String> items;
  // ...
}
Run Code Online (Sandbox Code Playgroud)