2015-12-11 54 views
0

這可能是一個愚蠢的問題,但我無法在網上找到明確的答案。 我正在用javax.ws.rs構建一個REST API。 我有一個類,它看起來像這樣如何從REST調用返回JSON?

public class Person{ 

    private String name; 

    private List<Telephone> telephones; 

    constructor + getters + setters 
} 

我實現getAllPerson REST調用應該返回JSON。這是我現在在做:

Path("/persons") 
@GET 
@Produces({MediaType.APPLICATION_JSON}) 
public List<Person> getAllPersons() { 
    return facade.getAllPersons(); 
} 

我不認爲這是做正確的方式,因爲它給了我一個錯誤(HTTP狀態500 - 內部服務器錯誤...)

而且我也不知道該程序如何知道如何將包含另一個電話對象列表的人員對象列表轉換爲JSON。

那麼什麼是正確的方式來返回像這樣的JSON列表,我應該手動構建json字符串?那麼getAllPersons()的返回類型應該是什麼?

對不起,如果這是一個非常愚蠢的問題,但我找不到一個清楚的答案。 在此先感謝。

編輯: 我得到的錯誤是:

Severe: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.myproject.domain.Person>. 

EDIT2: 我添加 @XmlRootElement我Person類,我添加一個空的構造

我也添加到了我pom文件:

<dependency> 
    <groupId>com.fasterxml.jackson.jaxrs</groupId> 
    <artifactId>jackson-jaxrs-json-provider</artifactId> 
    <version>2.6.4</version> 
</dependency> 
+0

在你的日誌文件中查看太查看發生了什麼,併發布堆棧跟蹤如果你自己找不到解決方案 – Jens

+0

你需要使用一些像Jackson這樣的JSON解串器。這是誰知道如何反序列化/序列化實體。 –

+0

我添加了錯誤:) – Bosiwow

回答

-1

正如你所猜測的,你正在得到一個內部錯誤,因爲你沒有返回一個JSON。您需要創建並返回具有必要數據的JSON對象。您可以通過兩種方式在Java中創建一個JSON:

  • 使用JSON對象
  • 序列化類成JSON對象

創建JSON對象的樣本的方法是:

import org.json.simple.JSONObject; 
JSONObject sampleJSON= new JSONObject(); 
sampleJSON.put("name", "Hello"); 
sampleJSON.put("age", 23); 

要返回JSON對象,請使用:

Path("/persons") 
@GET 
@Produces({MediaType.APPLICATION_JSON}) 
public JSONObject returnJSONData() { 
    JSONObject sampleJSON= new JSONObject(); 
    sampleJSON.put("name", "Hello"); 
    sampleJSON.put("age", 23); 
    return sampleJSON; 
} 
+0

沒有一種將Java對象轉換爲json的自動方法嗎? – Bosiwow

+0

是的,使用像傑克遜這樣的圖書館。舉個例子,請看這裏:http://www.studytrails.com/java/json/jackson-create-json.jsp – codingsplash

+1

@Bosiwow是的,這個答案不好 –

相關問題