Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery向Spring MVC控制器发送JSON_Jquery_Ajax_Json_Spring_Model View Controller - Fatal编程技术网

JQuery向Spring MVC控制器发送JSON

JQuery向Spring MVC控制器发送JSON,jquery,ajax,json,spring,model-view-controller,Jquery,Ajax,Json,Spring,Model View Controller,我无法使用jQueryAjax将JSON对象发送到SpringMVC控制器。这是我的控制器方法的定义: @Controller @RequestMapping(value = "InboxViewTemplate") public class InboxViewController { @ResponseBody @RequestMapping(value = "updateInboxView") public String updateInboxView(HttpServle

我无法使用jQueryAjax将JSON对象发送到SpringMVC控制器。这是我的控制器方法的定义:

@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) {
    ...
} 

应该有用

我在这里假设您已经正确配置了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>


或者在您的SpringXML配置中为其他消息转换器提供类似的功能。

您是否查看了日志文件以查找404的原因。我怀疑您需要jakson相关的jar文件来放入您的库。

谢谢您的回复,现在我收到一个404错误。我还尝试了var obj=jQuery.parseJSON(“{”createUser“:“John”}”);并将此对象传递给mvc方法。似乎无法识别RequestBody对象。我应该试一试吗?还是我的ajax请求不正确?非常感谢。@carlo首先检查您是否可以连接到控制器(使用curl或telnet)。然后检查服务器日志中是否有任何错误。检查spring上下文中是否有。最后检查消息转换器是否配置正确。查看我的编辑。现在发生了一个我无法理解的想法:如果我删除注释@RequestBody,那么如果存在注释,则会调用服务。我有一个404错误。如何处理这种情况?谢谢。@carlo-hmm,请确保将jquery的请求类型更改为“post”。否则jquery将尝试在url中编码json,我认为spring还不知道如何处理它。是的,请求的类型是:$.ajax({dataType:“json”,contentType:“application/json”,url:ctx+“/InboxViewTemplate/updateInboxView”,type:“POST”,cache:false,data:{name:“appId”},success:function(data){$(“#updateInboxView”).html(数据);},错误:函数(jqXHR,textStatus,errorhorn){alert(jqXHR+”:“+textStatus+”:“+errorhorn);});
<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>