当size<时,MyObject []返回json对象而不是数组。 2

时间:2011-06-04 15:02:31

标签: java json rest jax-ws

在我生成json的REST Web服务中,我有一个方法返回一个包含MyObject数组的对象。现在我遇到的问题是,当MyObject []中只有一个项目时,它会显示一个对象而不是一个数组。实施例;

如果对象有一个项目;

{ "myObjectList": { "name": "Test", "value": "Wicked"} }

但如果有多个项目;

{ "myObjectList": [{ "name": "Test", "value": "Wicked"}, { "name": "Test2", "value": "Not so wicked"}] } 

因为解析了JSON,并且我不想检查变量是否是客户端的数组,我想知道是否有办法让我的webservice始终将数组作为数组放出?

2 个答案:

答案 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;
    }
}