如何用json / jackson序列化忽略列表根?

时间:2012-01-04 14:19:30

标签: json jersey jackson

我有一个用@XmlRootElement注释的简单Bean:

@XmlRootElement
public class MyBean {
    private String name;

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

我有一个简单的泽西服务,它公开了这个bean和这个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"}]}

有没有一种简单的方法可以做到这一点,我没有找到任何注释?我不想为列表创建包装器。我需要修改jackson配置,还是创建一个映射器,......?

感谢您的帮助。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

AFAIK,如果您使用

MyBean[]

而不是ArrayList,你将得到你想要的!

希望有所帮助,