2011-12-28 135 views
4

我無法發送帶有JQuery Ajax的JSON對象到Spring MVC控制器。這是我的控制器的方法的定義:JQuery發送JSON到Spring MVC控制器

@Controller 
@RequestMapping(value = "InboxViewTemplate") 
public class InboxViewController { 

@ResponseBody 
    @RequestMapping(value = "updateInboxView") 
    public String updateInboxView(HttpServletRequest request, InboxView inboxView) { 
... 
} 

然後我試圖調用這個請求:

$.ajax({ 
      dataType: 'json', 
      contentType: "application/json", 
      url: ctx + "/InboxViewTemplate/updateInboxView", 
      data: ({inboxView : {createUser:"dave"}}), 
      success: function(data) { 
       $("#updateInboxView").html(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(jqXHR + " : " + textStatus + " : " + errorThrown); 
      } 
      }); 
     } 

但JSON對象未通過。有人能幫我嗎?提前致謝。

回答

8

首先你的控制器不知道在哪裏尋找InboxView。它是一個請求參數嗎?路徑參數?請求正文?

其次,您可能希望將您的json請求類型更改爲POST或PUT,因爲您更新的數據不僅僅是檢索它。

因此,像這樣:

@Controller 
@RequestMapping(value = "InboxViewTemplate") 
public class InboxViewController { 

@ResponseBody 
    @RequestMapping(value = "updateInboxView", method = RequestMethod.POST) 
    public String updateInboxView(HttpServletRequest request, @RequestBody InboxView inboxView) { 
    ... 
} 

$.ajax({ 
      dataType: 'json', 
      contentType: "application/json", 
      url: ctx + "/InboxViewTemplate/updateInboxView", 
      type: 'POST', 
      data: JSON.stringify({inboxView : {createUser:"dave"}}), //if no JSON is available use the one from https://github.com/douglascrockford/JSON-js 
      success: function(data) { 
       $("#updateInboxView").html(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       alert(jqXHR + " : " + textStatus + " : " + errorThrown); 
      } 
      }); 
     } 

應該工作。

我在這裏假設你已經正確配置了你的json消息轉換器。

編輯 這意味着你有:

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
<property name="messageConverters"> 
    <list> 
    <ref bean="jacksonMessageConverter"/> 
    </list> 
</property> 
</bean> 

或等價的東西在你的Spring的XML配置等信息轉換器。

+0

感謝您的回覆,現在我收到了404錯誤。我也試着用var obj = jQuery.parseJSON('{「createUser」:「John」}');並將此對象傳遞給mvc方法。看起來不能識別RequestBody對象。我應該嘗試其他配置嗎?或者是不正確的我的ajax請求?非常感謝。 – carlo 2011-12-28 11:19:32

+0

@carlo首先檢查您是否可以連接到您的控制器(使用curl或telnet)。然後檢查您的服務器日誌中是否有任何錯誤。檢查你的spring上下文中是否有。最後檢查你的消息轉換器是否配置正確。看我的編輯。 – soulcheck 2011-12-28 11:44:32

+0

現在發生了一個認爲我無法理解的問題:如果我刪除註解@RequestBody,則會調用服務,而不是如果存在註解,則會出現404錯誤。如何調試這種情況?謝謝。 – carlo 2011-12-29 08:14:39

0

你有沒有看到你的日誌文件,以找出404的原因。我懷疑你需要與jakson相關的jar文件放在你的lib中。

相關問題