SpringMVC返回对象类型报错(已解决)

SpringMVC返回对象类型报错(已解决)

错误描述

在使用ajax接收后端返回值时,遇到这样一个问题
1、刚开始接收返回值时,代码报错500,我没去查看报错详情,直接去看后端代码。
2、我将后端返回类型更改之后,ajax返回200成功,却进入error函数,百思不得其解。

后查阅资料发现是我返回的json格式不对,jQuery在1.4后,对ajax返回的json格式有了很强的限制,所以一定要用严格的JSON格式返回。但是在后端强制转换map为Json时,还是会直接进入error。

JSONObject jsonObject = new JSONObject(ret);

前端代码修改

var data = $("#form").serialize();
    $.ajax({
    type: "post",
    url: "login",
    data: data,
    dataType: "json", //返回数据类型
    success: function(data){
    if("success" == data.type){
         window.location.href = "index";
    } else{
         $.messager.alert("消息提醒", data.msg, "warning");
         $("#vcodeImg").click();//切换验证码
         $("input[name='vcode']").val("");//清空验证码输入框
    	}
    },
    error: function (XMLHttpResponse, textStatus, errorThrown) {
         console.log("1 异步调用返回失败,XMLHttpResponse.readyState:"+XMLHttpResponse.readyState);
         console.log("2 异步调用返回失败,XMLHttpResponse.status:"+XMLHttpResponse.status);
         console.log("3 异步调用返回失败,textStatus:"+textStatus);
         console.log("4 异步调用返回失败,errorThrown:"+errorThrown);
    }

error报错

1 异步调用返回失败,XMLHttpResponse.readyState:4
2 异步调用返回失败,XMLHttpResponse.status:500
3 异步调用返回失败,textStatus:error
4 异步调用返回失败,errorThrown:

这时候觉得会不会是我的依赖包没有配置好,导致springmvc无法将对象直接转换为json对象。因此查看了错误信息后。

报错如下:

org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.util.HashMap
	org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:233)
	org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:180)
	org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:119)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

确定了是自己缺少了两个依赖包,因此
在pom.xml中添加如下代码:

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.5</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.5</version>
    </dependency>

修改你的mvc-servlet.xml

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>

至此,所有问题得到解决,果然老师说的没有错,MVC框架写代码不难,难就难在配置变量,以此为戒。

感谢两位大佬提供的解决思路
链接: https://blog.csdn.net/java_zhangshuai.
链接: https://blog.csdn.net/feinifi.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值