我正在使用Jersey + Jackon制作一个可与JSON一起使用的REST API。
假设我有一个课程如下:
@XmlRootElement
public class A {
public String s;
}
这是我的泽西方法,它使用了这个类:
@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;
}
输出是:
{"a":[{"s":"abc"},{"s":"def"}]}
但我希望它是这样的:
[{"s":"abc"},{"s":"def"}]
我该怎么办? 请帮帮我。
答案 0 :(得分:2)
您的要求似乎是从json字符串中删除根元素。这可以在Jersey中配置如下。
在Jersey中,是否删除根元素是由JSONConfiguration.rootUnwrapping()
配置的。有关详细信息,请参阅JSON support in Jersey and CXF。
以下是执行此操作的示例代码。
@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;
}
}
答案 1 :(得分:0)
第一个是有效的JSON字符串。
第二个不是。
答案 2 :(得分:0)
您可以尝试将以下内容添加到您的web.xml,相关的<servlet>
节点下:
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
The Jersey documentation了解有关此设置的更多信息。
此功能是在泽西岛1.4中引入的,取决于杰克逊。如果您使用的是Glassfish 3.0.1或更低版本捆绑的版本,则需要follow the upgrade instructions。