2013-03-01 63 views
2

我試圖找到如何在Spring中編寫從REST客戶端POST POST JSON。例如,我寫道:如何在Spring中發送JSON?

@RequestMapping(value = "/{userId}/add", method = RequestMethod.POST, headers = {"content-type=application/json"}) 
@ResponseBody 
public Map<String, String> saveUser(@RequestBody User user, BindingResult result) { 
    Map<String, String> jsonResponse = new HashMap<String, String>(); 
    if (result.hasErrors()) { 
     jsonResponse.put("Message", "Can't add the user"); 
     jsonResponse.put("Code", "401"); 
     return jsonResponse; 
    } 
    userService.addUser(user); 
    jsonResponse.put("Message", "Success add User"); 
    jsonResponse.put("Code", "200"); 
    return jsonResponse; 
} 

最後從Firefox REST客戶端測試它。但是我看到了404錯誤。我究竟做錯了什麼? Thanx尋求幫助。

+0

發送給服務器的HTTP請求的內容是什麼? – 2013-03-01 15:01:49

+0

例如,我試圖這樣 \t \t { 「ID」:7, \t \t 「令牌」:空, \t \t 「nameUser」: 「穆德狐」, \t \t 「dateBirth」:「1975年10月25日」 \t \t 「角色」: 「ROLE_USER」, \t \t 「位置」: 「位置」, \t \t 「電子郵件」: 「[email protected]」, \t \t 「登錄」: 「muldfox」 \t \t 「手機」: 「12356565」, \t \t 「地址」:空, \t \t 「組織」:空, \t \t 「利益」:空 } – Maximus 2013-03-01 15:07:46

+0

有幾個可能的原因:1)春天是不是能夠解析你的字段之一,2)你的JSON對象中的字段與你的用戶對象中的字段不匹配,3)你的URL可能是錯誤的。如果您在問題中發佈整個HTTP請求和您的用戶類,也許我們可以縮小它的範圍。另外,如果日誌中有異常堆棧跟蹤,那也是有幫助的。 – 2013-03-01 15:33:17

回答

0

首先,如果請求的URI以「/ user/2/add」結尾,它將不會映射到您的方法,該方法映射爲「/ {userId}/add」。這將導致您收到的HTTP 404錯誤。相反,如果「userId」爲2,則您的URI應以「/ 2/add」結尾。

其次,使用@RequestBody註釋User參數對於複雜用戶類型不足。您將需要將您的JSON請求正文轉換爲一個User對象。您可以使用MappingJacksonHttpMessageConverter完成此操作。通過聲明這種類型的bean,您可以使用Jackson的註釋來控制JSON如何被解析爲User屬性。

+0

不,我做的都對。 @RequestBody就夠了,因爲我使用Spring 3.0.x.問題是當我測試它時,我沒有在請求頭中使用頭。 – Maximus 2013-03-13 10:07:40

+0

啊,好的。真高興你做到了。 – 2013-03-14 22:10:03