2012-07-12 49 views
2

当前我正在尝试创建一个简单地返回列表的web服务;从JSON结果中删除类型信息

@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"} 

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

回答

5

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

+2

@JsonTypeInfo(使用= Id.NONE)是溶液 – Thys 2012-07-12 12:10:40

0

要完全抑制类型的信息,我不得不使用以下注释:

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