2014-01-28 34 views
0

說我有一個簡單的類名稱和姓氏作爲屬性的人。還假設我有一個簡單的休息服務,獲得返回人員列表的終端。爲什麼返回類型爲Iterable <MyClass>的jax-rs服務工作,而收集<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; 
    } 
} 

最前一頁endpoin 測試/人/迭代將正常工作,而沒有任何一個有對這個線索測試/人/收集將HTTP 500失敗?

回答

0

Jersey有一個註冊表,它將@Produces中的MIME類型與該方法聲明要返回的Java類型以及處理該對象以產生響應有效負載的處理程序相關聯。它有一個處理程序,可將IterableList轉換爲JSON Array。它還有一個處理程序,可將Map轉換爲JSON Object。 Java接口Collection的問題在於沒有指示它是否應表示爲順序集合(JSON Array)還是無序集合的命名項目(JSON Object)。因此,沒有默認註冊處理程序將Collection轉換爲application/json。這是應用程序服務器上記錄的異常中的消息指示的內容。

+0

我對此不太確定。它必須更多地使用泛型和[TypeEreasure](http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)。我做了測試,創建了一個Person類和上面的服務,但是我能夠無差別地返回Iterable或Collection。然後我添加了一些泛型,並停止爲Iterable和Collection兩者工作。當我能夠返回Iterable而不是Collection時,我嘗試重現完全相同的場景,但不幸的是我無法做到這一點。然後......我不知道這是否仍然是一個有效的問題,因爲我無法複製它 –

相關問題