杰克逊等同于 XStreamImplicit

Jackson equivalent to XStreamImplicit

我在使用 Jackson 时遇到问题,我需要找到一种方法让以下对象正确序列化以支持 swagger 文档。

public Class Foo{
  @XStreamImplicit
  List<Bar> bars;
}

当用 XStream 序列化时,它看起来像:

<Foo>
  <Bar>b1</Bar>
  <Bar>b2</Bar>
</Foo>

我们希望在 JSON 中有类似的显示,但我不知道这是否可能,因为 JSON 我认为本质上是 K,V 地图。

{
"bar":"b1",
"bar":"b2"
}

澄清任何一点都会非常有帮助!

编辑:

看起来问题出在 swagger 上,添加数组符号仍然不允许为不同的响应代码填充响应模型。我们认为注释不处理集合存在问题。

那不是地图而是数组。在 JSON 中,不能有多个同名键。 JSON 等效项如下所示:

{
  "bar": [ "b1", "b2" ]
}

这里有一个 class,它将向您展示使用 arraylist 作为标准输出(如 Ron 所示)或将其展开以将列表展平为对象数组之间的 JSON 输出差异@JsonValue

public class Answer28482248 {

public static class JsonArrayStandard
{
    ArrayList<String> myList;

    public JsonArrayStandard()
    {
        myList = new ArrayList<String>();
        myList.add("a");
        myList.add("b");
    }

    public ArrayList<String> getMyList()
    {
        return myList;
    }

}

public static class JsonArrayAsValue extends JsonArrayStandard
{
    public JsonArrayAsValue()
    {
        super();
    }

    @JsonValue
    public ArrayList<String> getMyList()
    {
        return myList;
    }

}

public static void main(String[] args) 
{
    // TODO Auto-generated method stub
    try{
        JsonArrayStandard standard = new JsonArrayStandard();
        JsonArrayStandard asValue = new JsonArrayAsValue();

        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.writeValueAsString(standard));
        System.out.println(mapper.writeValueAsString(asValue));
    }
    catch (Exception e)
    {
        System.out.println("Something went wrong");
    }
}

}

输出为:

{"myList":["a","b"]}

["a","b"]