从JSON结果中删除类型信息

时间:2012-07-12 05:43:35

标签: json jersey jax-rs

目前我正在尝试创建一个只返回列表的Web服务;

@Path("/random")
@Singleton
public class Random
{
    @GET
    @Path("/")
    @Produces(MediaType.APPLICATION_JSON)
    public MyResult<String> test()
    {
        MyResult<String> test =  new MyResult<String>();
        test.add("Awesome");

        return test;
    }
}

我的MyResult类看起来像这样:

@XmlRootElement
public class MyResult<T> implements Iterable<T>
{
    private ArrayList<T> _items;
    private int _total;

    public MyResult()
    {
        _items = new ArrayList<T>();
    }

    public ArrayList<T> getItems()
    {
        return _items;
    }

    public void setItems(ArrayList<T> items)
    {
        _items = items;
    }

    public int getTotal()
    {
        return _total;
    }

    public void setTotal(int total)
    {
        _total = total;
    }

    public void add(T item)
    {
        getItems().add(item);
    }

    public Iterator<T> iterator()
    {
        return getItems().iterator();
    }
}

现在我从服务中得到以下结果:

{"items":[{"@type":"xs:string","$":"Awesome"}],"total":"0"}

但我不想要任何这些信息,我只需要这个:

{"items":["Awesome"],"total":"0"}

在我看来,这需要某些配置,谁知道如何获得所需的结果?

2 个答案:

答案 0 :(得分:5)

假设您使用的是jackson,请查看@JsonTypeInfo注释。它用于配置是否以及如何使用类型信息与JSON序列化和反序列化的详细信息。它的用途和行为取决于您使用的杰克逊版本。

答案 1 :(得分:1)

要完全抑制类型信息,我必须使用以下注释:

@JsonTypeInfo(use=JsonTypeInfo.Id.NONE)
@JsonDeserialize(as=NoType.class)