2012-01-04 74 views
0

我有一個簡單的bean標註有@XmlRootElement:如何用json/jackson序列化忽略列表根目錄?

@XmlRootElement 
public class MyBean { 
    private String name; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

我有一個簡單的球衣服務,使本豆和這個bean的列表:

@Component 
@Path("/myresource") 
public class MyResource { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<MyBean> getAll() { 
      //... 
      return list; 
    } 

    @GET 
    @Path("{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public MyBean getById(@PathParam("id") long id) { 
     //... 
     return bean; 
    } 
} 

麻煩的是當我得豆的名單,我有以下的JSON:

{"myBean":[{"name":"Hello"},{"name":"Plop"}]} 

我想什麼是(無單根名):

{[{"name":"Hello"},{"name":"Plop"}]} 

有沒有簡單的方法來做到這一點,我沒有找到任何註釋?我不想爲列表創建一個包裝。我是否需要修改傑克遜配置,或創建映射器,...?

感謝您的幫助。

回答

0

據我所知,如果你使用

MyBean[] 

,而不是ArrayList中,你會得到你想要什麼!

希望幫助,

3

感謝您的幫助,但我曾與一個陣列相同的結果。

取而代之的是,我取消了爲myBean的XmlRootElement將註釋並添加在servlet的聲明在web.xml如下:

<init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
+0

這一點很重要 - 你可能使用映射器的符號之一(badgerdfish /拋棄,自然),它添加包裝元素。 @XmlRootElement應該與POJO映射一致,儘管不需要任何東西。 – StaxMan 2012-01-06 22:06:30

+0

澤西島花了很多時間搞砸列表和陣列。 POJO映射應該解決這個問題,但可能需要一些代碼調整。 – 2012-01-17 07:54:00