项目环境介绍:
maven构建, springmvc,spring,mybatis框架 , 前端用ajax请求, 交互数据格式json , 注解式开发, 后端controller层控制器返回json格式的数据会报错 :
前台代码(ajax代码块):
function isHandle(id){
alert("ishandle");
$.ajax({
url:"isHandle_change",
type:"post",
dataType:"json",
contentType: "application/json",
data:{id:id},
success:function(result){
alert("测试进入success方法");
}
});
}
后台controller方法:
@RequestMapping("/isHandle_change")
@ResponseBody
public Map<String,Object> complaintListChange(){
List<ComplaintCondition> list=new ArrayList<ComplaintCondition>();
list=complaintService.getComplaintList1();
Map<String,Object> map=new HashMap<String, Object>();
map.put("date",list);
return map;
}
问题:
运行后,ajax可以访问controller方法,但是返回的json数据后,ajax的success接收不到,提示的错误是:
Java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.HashMap
从错误信息的原因来看,是后台返回的json数据与ajax的dataType:”json” 不匹配,但是@responseBody注解会自动将返回数据封装成json格式,猜想是配置的问题,还有json包版本冲突
在springmvc配置文件中,注解式适配器中添加json格式转换器 :
<!-- 注解适配器 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- 配置json转换器 -->
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</list>
</property>
</bean>
如果是Maven项目,依赖jar包如下:
<!-- Spring 升级4+ 依赖的JSON包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.4</version>
</dependency>