MyObject [] возвращает объект json вместо массива, когда размер <2 - PullRequest
2 голосов
/ 04 июня 2011

В моем веб-сервисе REST, который производит json, у меня есть метод, который возвращает объект, который содержит массив MyObject. Теперь у меня проблема в том, что когда MyObject [] содержит только один элемент, он показывает один объект вместо массива. Пример;

Если объект имеет один элемент;

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

Но если есть более одного предмета;

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

Поскольку JSON анализируется, и я не хочу проверять, является ли переменная массивом на стороне клиента, мне было интересно, есть ли способ заставить мой веб-сервис всегда выдавать массив как массив

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Видимо, это известная ошибка, решение можно найти здесь;

http://blogs.oracle.com/enterprisetechtips/entry/configuring_json_for_restful_web

0 голосов
/ 30 сентября 2018

Ссылка в существующем ответе не работает для меня. Но работает следующий код: поместите это в 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;
    }
}
...