2014-01-28 1 views
0

Скажем, у меня есть простой класс Person с именем и фамилией в качестве свойств. Также предположим, что у меня есть простой сервис для отдыха с получением конечных точек, которые возвращают список людей.Почему служба jax-rs с возвратным типом Iterable <MyClass> работает в то время как коллекция <MyClass> нет?

public class Person { 
    // name and last name properties plus getters and setters 
} 

// Service 
@Stateless 
@LocalBean 
@Path("test") 
public class SimpleRestService { 
    //Suppose people is initialized and contains actual people 
    private ArrayList<Person> people; 

    @GET 
    @PATH("/people/iterable") 
    public Iterable<Person> getPeople(){ 
     //This one works 
     return people; 
    } 

    @GET 
    @PATH("/people/collection") 
    public Collection<Person> getPeople(){ 
     //This one fails. HTTP 500. Nothing on server.log ... 
     return people; 
    } 
} 

Fisrt endpoin тест/люди/итерацию будет нормально работать, пока тест/люди/Коллекция потерпит неудачу с HTTP 500. Есть ли какой-либо один ключ на этом?

ответ

0

У Джерси есть реестр, относящийся к типу MIME в @Produces с типом Java, который объявлен как метод, и обработчик, который обрабатывает объект для получения полезной нагрузки ответа. Он имеет обработчик, который преобразует Iterable и List в JSON Array. Он также имеет обработчик, который преобразует Map в JSON Object. Проблема с интерфейсом Java Collection заключается в том, что нет никаких указаний относительно того, следует ли его представлять в виде последовательной коллекции (JSON Array) или неупорядоченного набора именованных элементов (JSON Object). Таким образом, по умолчанию для обработчика Collection не зарегистрирован обработчик application/json. Это то, что указывает сообщение в исключении, зарегистрированное на вашем сервере приложений.

+0

Я не совсем уверен в этом. Он должен делать больше с generics и [TypeEreasure] (http://docs.oracle.com/javase/tutorial/java/generics/erasure.html). Я делал тесты, создавая класс Person и сервисы выше, но я смог равнодушно возвращать как Iterable, так и Collection. Затем я добавил несколько дженериков, и он прекратил работать как для Iterable, так и для Collection. Я попытался воспроизвести тот же самый сценарий, когда мне удалось вернуть Iterable, а не коллекцию, но, к сожалению, я не мог этого сделать. Тогда ... Я не знаю, является ли это по-прежнему действительным вопросом или нет, поскольку я не могу его воспроизвести –

 Смежные вопросы

  • Нет связанных вопросов^_^