Spring MVC处理JSON数据(3)-自定义消息转换器
Spring MVC默认使用Jackson处理JSON数据。在实际开发中,若需要使用其他的工具处理JSON,那么就可以使用自定义的Http消息转换器(HttpMessageConverter)。
使用fastjson处理JSON示例:
1.User实体类
public class User implements Serializable {
private static final long serialVersionUID = -1684248767747396092L;
private String username;//用户名
private String pwd;//密码
//get、set略
}
2.请求的js
$("#_btn_send3").click(function(){
$.ajax({
url : "${pageContext.request.contextPath}/json/receiveJson3.do",
type : "post",
data: {username:"小明",pwd:"123456"},
dataType : "json",
success : function(data){
console.log(data);
}
});
});
3.Controller
该方法和前两篇文章一致,仍是通过@ResponseBody标识将Java类转换为特定格式的数据写入到输出流中。区别的地方是在Spring要调用我们自定义的消息转换器。@RequestMapping("/receiveJson3")
public @ResponseBody Map<String, Object> receiveJson3(User user) throws Exception {
Map<String, Object> dataMap = new HashMap<String,Object>();
dataMap.put("status", "success");
if(user != null){
System.out.println("用户名:" + user.getUsername() + " 密码:" + user.getPwd());
}else {
System.out.println("未获取到用户");
}
dataMap.put("user", user);
return dataMap;
}
4.配置springmvc.xml
重点在springmvc配置这里,此时不注册默认的消息转换器,并在此定义自己的消息转换器以及fastjson转换器。在使用fastjson时,需要引入fastjson.jar,具体配置如下:
<!-- 设置配置方案 -->
<mvc:annotation-driven>
<!-- 不使用默认的消息转换器 -->
<mvc:message-converters register-defaults="false">
<!-- 配置Spring的转换器 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
<!-- 配置fastjson中实现HttpMessageConverter接口的转换器 -->
<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!-- 加入支持的媒体类型,返回contentType -->
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
5.测试结果
(1).正常结果
(2).为测试是否是配置的fastjson起作用,注释掉<bean id="fastJsonHttpMessageConverter" ...>该bean后测试结果
6.注
(1).通过<mvc:message-converters>关闭默认的消息转换器,之后自定义所需使用的JSON转换器。在引入相关jar后,使用实现了HttpMessageConverter接口的类创建bean,同时配置响应的MIME;
(2).406状态码:HTTP协议状态码的一种,Not Acceptable,客户端错误,一般指客户端浏览器不接受请求的MIME类型
(3).fastjson相关jar下载地址,GitHub:点击打开链接,CSDN:点击打开链接