2011-12-28 133 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中。

相关问题