Unwrap a element in Jackson/Jaxb

痴心易碎 提交于 2019-12-18 06:50:44

问题


I am using Jersey+Jackon to make a REST API which works with JSON.

Assume that I have a class as follows:

@XmlRootElement
public class A {
    public String s;
}

and here is my jersey method which uses the class:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Object get(@PathParam("id") String id) throws Exception{
    A[] a= new A[2];
    a[0] = new A();
    a[0].s="abc";
    a[1] = new A();
    a[1].s="def";
    return a;
}

the out put is:

{"a":[{"s":"abc"},{"s":"def"}]}

but I want it to be like this:

[{"s":"abc"},{"s":"def"}]

What should I do? Please help me.


回答1:


Your requirement seems to be to drop the root element from json string. This can be configured in Jersey as follows. In Jersey, whether dropping root element is configured by JSONConfiguration.rootUnwrapping(). More details can be found in JSON support in Jersey and CXF.

Here's a sample code that does this.

   @Provider
   public class MyJAXBContextResolver implements ContextResolver<JAXBContext> {

       private JAXBContext context;
       private Class[] types = {StatusInfoBean.class, JobInfoBean.class};

       public MyJAXBContextResolver() throws Exception {
           this.context = new JSONJAXBContext(
                   JSONConfiguration.mapped()
                                      .rootUnwrapping(true)
                                      .arrays("jobs")
                                      .nonStrings("pages", "tonerRemaining")
                                      .build(),
                   types);
       }

       public JAXBContext getContext(Class<?> objectType) {
           return (types[0].equals(objectType)) ? context : null;
       }
   }



回答2:


The first one is a valid JSON String.

The second is not.




回答3:


You could try add the following to your web.xml, under the relevant <servlet> node:

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

The Jersey documentation has more information on this setting.

This feature was introduced in Jersey 1.4 and depends on Jackson. If you're using the version bundled with Glassfish 3.0.1 or below, you will need to follow the upgrade instructions.



来源:https://stackoverflow.com/questions/11027713/unwrap-a-element-in-jackson-jaxb

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!