項目環境介紹:前端
maven構建, springmvc,spring,mybatis框架 , 前端用ajax請求, 交互數據格式json , 註解式開發, 後端controller層控制器返回json格式的數據會報錯 :java
function isHandle(id){ alert("ishandle"); $.ajax({ url:"isHandle_change", type:"post", dataType:"json", contentType: "application/json", data:{id:id}, success:function(result){ alert("測試進入success方法"); } }); }
@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.HashMapweb
從錯誤信息的緣由來看,是後臺返回的json數據與ajax的dataType:」json」 不匹配,可是@responseBody註解會自動將返回數據封裝成json格式,猜測是配置的問題,還有json包版本衝突ajax
在springmvc配置文件中,註解式適配器中添加json格式轉換器 :spring
<!-- 註解適配器 --> <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包以下:json
<!-- 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>