解决springmvc接收ajax的POST请求,返回HashMap对象时的问题
目前刚接触springmvc不久,在做项目的时候,请求接口出现了如下的异常。
错误:
No converter for [class java.util.HashMap] with preset Content-Type 'null'
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @Controller public class LoginController { private ModelMap modelMap;
@RequestMapping(value = "/login_api",consumes="application/json",method = RequestMethod.POST) @ResponseBody public Map<String,Object> login(@RequestBody Resident resident, HttpServletRequest request){ Map<String,Object> result = new HashMap<String,Object>(); ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); encrypt(resident); Login login_ = (Login) ac.getBean("login"); boolean is_success = login_.login(modelMap,resident); if (is_success){ result.put("code",12); } else{ result.put("code",-12); } return result; }
public void encrypt(Resident resident){ resident.setPassword(OcrIdCardImpl.getMD5(resident.getPassword())); } }
|
说明:上述接收ajax的POST请求,然后以HashMap的形式返回给前端,仔细想想前端不可能接收HashMap的类型的数据吧,人家也没有这个类型,因此srpingmvc内部需要转换成JSON格式,发送给前端,问题就出在这里,产生异常的原因就是转化JSON格式失败。
解决方法:
通过度娘发现了几篇写的挺好的博客,这里记录一下,以免日后碰到同样的问题,不知所措。
主要原因是缺少jackson相关的包。
配置pom.xml如下,添加所需要的包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <!--json包--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.10.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.2</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.2</version> </dependency>
|
说明:
添加之后,重启服务器发现还是出现了该异常,经过一番尝试,最终发现produces ="text/html;charset=UTF-8"
这个属性是不能加在RequestMapper
。至于为什么不能加,目前还不太清楚,过几天再去解决这个问题吧。去掉produces ="text/html;charset=UTF-8"
,以及添加所需要的包。重启服务器后,就没有报异常了。