8.json資料互動
8.1為什麼要進行json資料互動
json資料格式在接口調用中、html頁面中較常用,json格式比較簡單,解析還比較友善。
比如:webservice接口,傳輸json資料。 8.2springmvc進行json互動
1.請求json,輸出json,要求請求的是json串,是以在前端頁面中需要将請求的内容轉成json,不太友善。 2.請求key/value,輸出json。此方法比較常用。
8.3環境準備
8.3.1加載json串的jar包
springmvc中使用jackson的包進行json轉換(@requestBody和@responseBody使用下邊的包進行json串)。 8.3.2配置json轉換器
在注解擴充卡中加入messageConverters
<!-- mvc:annotation-driven代替上邊注解映射器和注解擴充卡的配置 mvc:annotation-driven預設加載很多的參數綁定方法,比如json轉換解析器就預設加載了,
如果使用mvc:annotation-driven不用配置上邊的RequestMappingHandlerMapping和RequsetMappingHandleAdaper
實際開發中使用:mvc:annotation-driven --> 8.4json互動測試
8.4.1輸入json串,輸出是json串
8.4.1.1jsp頁面
使用jquery的ajax送出json串,對輸出的json結果進行解析。 function requestJson() {
//請求json,輸出的是json
$.ajax({
type : 'post',
url : '${pageContext.request.contextPath }/requestJson.action',
contentType : "application/json;charset=UTF-8",
//資料格式是json 串
data : '{"name":"手機", "price":9090}',
success : function(data) {
alert(data);
}
});
}
8.4.1.2controller
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
itemsCustom.setName(itemsCustom.getName() + "王際"); return itemsCustom;
} 8.4.2輸入key/value,輸出是json串
8.4.2.1jsp頁面
function responseJson() {
//請求key/value,輸出的是json
$.ajax({
type : 'post',
url : '${pageContext.request.contextPath }/responseJson.action',
// contentType : "application/json;charset=UTF-8",
//資料格式是key/value
data : 'name=手機&price=999',
success : function(data) {
alert(data);
}
});
} 8.4.2.2controller
@RequestMapping("/responseJson")
public @ResponseBody ItemsCustom responseJson(ItemsCustom itemsCustom) {
return itemsCustom;
} 9.RESTful支援
9.1什麼是RESTful
RESTful架構,就是目前最流行的一種網際網路軟體架構。它結構清晰、符号标準、易于了解、擴充友善、是以正得到越來越多網站的采用。 RESTful(即Representational State Transfer的縮寫)其實是一個開放理念,是對http的很好的诠釋。
1.對url進行規範,寫RESTful格式的url
非REST的url:http://...../queryItems.action?id=001&type=T01
REST的url:http://..../items/001
特點:url簡潔,将參數通過url傳到服務端 2.http的方法規範
不管是删除、添加、更新。。使用url是一緻的,如果進行删除,需要設定http的方法為delete,同理添加。。。 背景controller方法:判斷http方法,如果是delete執行删除,如果是post執行添加。
3.對http的contentType規範
請求時指定contentType,要json資料,設定成json格式的type。。 9.2REST的例子
9.2.1需求:
查詢商品資訊,傳回json資料。 9.2.2controller
定義方法,進行url映射使用REST風格的url,将查詢商品資訊的id傳入controller 輸出json使用@ResponseBody将java對象輸出json。
@RequestMapping("/requestJson")
public @ResponseBody ItemsCustom requestJson(@RequestBody ItemsCustom itemsCustom) {
itemsCustom.setName(itemsCustom.getName() + "王際"); return itemsCustom;
}
@RequestMapping(value="/itemsView/{id}"):{XXX}占位符,請求的url可以是“/viewItems/1”或“viewItems/2”,通過在方法中使用@PathVariable擷取{XXX}中的XXX變量。
@PathVariable用于将請求url中的模闆變量映射到功能處理方法的參數上。
如果RequestMapping中表示為“/itemsView/{id}”,id和形參名稱一緻,@PathVariable不用指定名稱。 9.2.3REST方法的前端控制器配置
在web.xml配置:
<!-- springmvc-rest前端控制器 -->
<servlet>
<servlet-name>springmvc-rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc加載的配置檔案(配置處理器、映射器、擴充卡等等) 如果不配置contextConfigLocation,預設加載的是/WEB-INF/servlet名稱-servlet.xml(springmvc-servlet.xml) -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springmvc-rest</servlet-name>
<!-- 第一種:*.action,通路以.action結尾由DispatcherServlet進行解析 第二種:/,所有通路的位址都由DispatcherServlet進行解析,對于靜态檔案的解析需要配置不讓DispatcherServlet解析
使用此種方法可以實作RESTful風格的url 第三種:/*,這樣配置不對,使用這種配置,最終需要發到一個jsp頁面時, 仍然會有DispatcherServlet解析jsp位址值,不能提供jsp頁面找到handler,會報錯 -->
<url-pattern>/</url-pattern>
</servlet-mapping> 9.3對靜态資源的解析
配置前端控制器的url-parttern中指定/,對靜态資源的解析出現問題:
在springmvc.xml中添加靜态資源解析方法。
<!-- 靜态資源 -->
<mvc:resources location="/assets/css/" mapping="/css/**" />
<mvc:resources location="/assets/font/"
mapping="/font/**" />
<mvc:resources location="/assets/images/"
mapping="/images/**" />
<mvc:resources location="/assets/js/" mapping="/js/**" />
<mvc:resources location="/assets/musics/"
mapping="/musics/**" />
<mvc:resources location="/assets/scripts/"
mapping="/scripts/**" />
<mvc:resources location="/assets/upload/"
mapping="/upload/**" />