JQuery发送JSON到Spring MVC控制器
问题描述:
我无法发送带有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对象未通过。有人能帮我吗?提前致谢。
答
首先你的控制器不知道在哪里寻找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配置等信息转换器。
答
你有没有看到你的日志文件,以找出404的原因。我怀疑你需要与jakson相关的jar文件放在你的lib中。
感谢您的回复,现在我收到了404错误。我也试着用var obj = jQuery.parseJSON('{“createUser”:“John”}');并将此对象传递给mvc方法。看起来不能识别RequestBody对象。我应该尝试其他配置吗?或者是不正确的我的ajax请求?非常感谢。 – carlo 2011-12-28 11:19:32
@carlo首先检查您是否可以连接到您的控制器(使用curl或telnet)。然后检查您的服务器日志中是否有任何错误。检查你的spring上下文中是否有 。最后检查你的消息转换器是否配置正确。看我的编辑。 –
soulcheck
2011-12-28 11:44:32
现在发生了一个认为我无法理解的问题:如果我删除注解@RequestBody,则会调用服务,而不是如果存在注解,则会出现404错误。如何调试这种情况?谢谢。 – carlo 2011-12-29 08:14:39