在我生成json的REST Web服务中,我有一个方法返回一个包含MyObject数组的对象。现在我遇到的问题是,当MyObject []中只有一个项目时,它会显示一个对象而不是一个数组。实施例;
如果对象有一个项目;
{ "myObjectList": { "name": "Test", "value": "Wicked"} }
但如果有多个项目;
{ "myObjectList": [{ "name": "Test", "value": "Wicked"}, { "name": "Test2", "value": "Not so wicked"}] }
因为解析了JSON,并且我不想检查变量是否是客户端的数组,我想知道是否有办法让我的webservice始终将数组作为数组放出?
答案 0 :(得分:1)
显然这是一个已知的错误,可以在这里找到解决方案;
http://blogs.oracle.com/enterprisetechtips/entry/configuring_json_for_restful_web
答案 1 :(得分:0)
现有答案中的链接对我不起作用。但是以下代码可以正常工作: 放在JAXBContextResolver .java中,问我是否不清楚。
package model;
import java.util.Map;
import java.util.HashMap;
import java.util.HashSet;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;
import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;
@Provider
public class JAXBContextResolver implements ContextResolver < JAXBContext > {
private JAXBContext context;
@SuppressWarnings("rawtyp`enter code here`es")
private Class[] types = {CarModel.class,CarProduction.class,Ride.class,GeneralResponse.class};
public JAXBContextResolver() throws Exception {
//rides is the jsonarray ``that will be converted to array if has one
//one object, else it will return as jsonObject
this.context = new JSONJAXBContext(JSONConfiguration.mapped().arrays("rides").build(),
types);
}
public JAXBContext getContext(Class<?> objectType) {
System.out.println("Inside getContext"+objectType+");;;;;;");
for (Class<?> type : types) {
if (type == objectType) {
System.out.println("converttttted");
return context;
}
}
return null;
}
}