目前網絡上傳遞數據大部分都是json和xml,但是xml使用的很少了,這裏主要介紹json,一般來說json常用的場景是提供外部接口,請求內使用request域就足夠了
springmvc對於json的支持,上圖
1.請求json方式分析
如果請求的json串,要求客戶端進行http請求前需要將請求的內容格式化爲json格式數據。
此方法沒有直接post提交key/value格式數據簡單。
如果響應的是json串,很方便客戶端對響應結果信息進行解析。
所以如果沒有特殊要求請求key/value即可,而爲了方便客戶端解析建議將結果數據響應成json。
2.簡介目前實現json和對象互轉的工具類:Jackson,fastjson,gson,需要jar包
springmvc默認是支持Jackson的,配置註解handlerMapping時就會默認配置了Jackson的解析器
但是我在做4.2的json解析時總是報錯,說是無法識別application/json這個contentType,無語了,調試了好久也不行
所以就是用阿里巴巴的fastJson,這個號稱是目前最快的json解析工具,而且就一個jar包,很方便
3.搭建springmvc的開發環境:具體可以參考我的 這篇文章,這是一個系列:
http://blog.csdn.net/do_bset_yourself/article/details/51291958
4,配置Fastjson解析器,這裏使用註解開發,在springmvc配置文件中添加:
<mvc:annotation-driven >
<mvc:message-converters register-defaults="true">
<!-- 配置Fastjson支持 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<value>WriteMapNullValue</value>
<value>QuoteFieldNames</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 使用註解時一定要配置註解掃描 -->
<context:component-scan base-package="com.leige.controler" />
5.頁面開發,這裏使用jquery的ajax異步請求,需要導入jquery:
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
function requestJson(){
//使用ajax請求
$.ajax({
type:'post',
url:'${pageContext.request.contextPath }/upLoad/requestJson.action',
contentType:'application/json;charset=utf-8',
//請求的json,設置
data:'{"name":"leige","age":55}',
success:function(data){
alert(data.name);
}
});
}
//請求key/value響應json
function responseJson(){
//使用ajax請求
$.ajax({
type:'post',
url:'${pageContext.request.contextPath }/upLoad/responseJson.action',
//請求的json,設置
//contentType:'application/json;charset=utf-8',
//不用指定contentType因爲默認提交是key/value
data:'name=leige&age=15',
success:function(data){
alert(data);
}
});
}
</script>
<title>json測試</title>
</head>
<body>
<input type="button" value="請求json響應json" onclick="requestJson()"><br/>
<input type="button" value="請求key/value響應json" onclick="responseJson()"><br/>
</body>
controler方法,配置好json解析器後,就只需要使用註解完成:
/**
*
* RequestBody註解會自動將json串轉換爲java對象
* ResponseBody會將java對象轉爲json對象
* @param student
* @return
*
* 測試json,請求json返回json
*/
@RequestMapping("/requestJson")
public @ResponseBody Student jsonTest(@RequestBody Student student){
return student;
}
/**
*
* RequestBody註解會自動將json串轉換爲java對象
* ResponseBody會將java對象轉爲json對象
* @param student
* 測試key/value返回json
*/
@RequestMapping("/responseJson")
public @ResponseBody Student responseJson(Student student){
return student;
}
測試結果:
**注意
注意一定要配置json解析器,不然會報controler方法返回參數不合法這個錯誤**
原文鏈接:http://blog.csdn.net/do_bset_yourself/article/details/51324186