SpringMVC的请求接口报HashMap为null的问题(已解决)

解决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; // base on @SessionAttributes, append instance into modelMap

@RequestMapping(value = "/login_api",consumes="application/json",method = RequestMethod.POST)
@ResponseBody
public Map<String,Object> login(@RequestBody Resident resident, HttpServletRequest request){
//Accept data as entity class
Map<String,Object> result = new HashMap<String,Object>();
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// login interface
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;
}

// encrypt password
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",以及添加所需要的包。重启服务器后,就没有报异常了。