2012-11-27 50 views
15

我正在第一次寫Web服務。我創建了一個基於Jersey的RESTful Web服務。我想產生JSON。我需要做什麼才能生成正確的JSON類型的Web服務?如何通過RESTful Web服務正確生成JSON?

這裏是我的方法之一:

@GET 
@Path("/friends") 
@Produces("application/json") 
public String getFriends() { 
    return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}"; 
} 

是否足夠,我只是指出註釋@Produces("application/json")我的方法是什麼?那麼這個方法可能會返回任何類型的對象?還是隻有字符串?我是否需要額外處理或轉換這些對象?

請幫助我作爲初學者處理這些問題。提前致謝!

回答

25

您可以使用jaxb註釋爲bean註釋。

@XmlRootElement 
    public class MyJaxbBean { 
    public String name; 
    public int age; 

    public MyJaxbBean() {} // JAXB needs this 

    public MyJaxbBean(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 
    } 

,然後你的方法應該是這樣的:

@GET @Produces("application/json") 
    public MyJaxbBean getMyBean() { 
     return new MyJaxbBean("Agamemnon", 32); 
    } 

有最新的文檔中的一章,與此交易:

https://jersey.java.net/documentation/latest/user-guide.html#json

+0

感謝您指出no-param構造函數部分。這很重要! – simplysiby

5

你可以使用一個包像org.json http://www.json.org/java/

因爲您將需要更頻繁地使用JSONObjects。

在那裏,你可以輕鬆地創建一個JSONObjects,並把一些數值到它:

JSONObject json = new JSONObject(); 
JSONArray array=new JSONArray(); 
    array.put("1"); 
    array.put("2"); 
    json.put("friends", array); 

    System.out.println(json.toString(2)); 


    {"friends": [ 
     "1", 
     "2" 
    ]} 

編輯這樣做,你可以在不同的層建立自己的迴應,並返回它們作爲一個對象

0

優勢使用此批註

@RequestMapping(value = "/url", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) 
+0

這不是Spring註釋嗎? 我不認爲這是有效的。 – Entomo

+0

OP很清楚:_「我創建了一個基於** Jersey **的REST風格的Web服務。」_ @ GetMapping註釋不是Jersey API的一部分。這是一個Spring MVC註釋。 –

2
@GET 
@Path("/friends") 
@Produces(MediaType.APPLICATION_JSON) 
public String getFriends() { 

    // here you can return any bean also it will automatically convert into json 
    return "{'friends': ['Michael', 'Tom', 'Daniel', 'John', 'Nick']}"; 
} 
+3

'@Produces(「application/json」)與'@Produces(MediaType.APPLICATION_JSON)'有什麼不同? – 2016-07-12 06:40:58

+1

完全一樣的東西。 'MediaType.APPLICATION_JSON'是一個常量,其值等於'application/json'。使用常量不太容易出錯,因此是更好的選擇 – Adrien

1
@POST 
@Path ("Employee") 
@Consumes("application/json") 
@Produces("application/json") 
public JSONObject postEmployee(JSONObject jsonObject)throws Exception{ 
    return jsonObject; 
}