杰克逊相当于XStreamImplicit

时间:2015-02-12 16:09:36

标签: java serialization jackson xstream swagger

我遇到了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"
}

对这些要点的澄清将非常有帮助!

编辑:

看起来问题在于招摇,添加数组表示法仍然不允许为不同的响应代码填充响应模型。我们认为注释没有处理集合存在问题。

2 个答案:

答案 0 :(得分:1)

这不是地图而是数组。在JSON中,您不能拥有多个具有相同名称的键。 JSON等价物将如下所示:

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

答案 1 :(得分:0)

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

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中”:[ “一”, “B”]}

[ “一”, “B”]