1. 程式人生 > >SpringMVC訊息轉換器

SpringMVC訊息轉換器

1. HttpMessageConverter訊息轉換器
概念:
將請求資訊----》訊息轉換器-----》物件
 物件--------》訊息轉換器-----》響應資訊體
訊息轉換器它只針對
@RequestBody/@ResponseBody註解或HttpEntity/ResponseEntity類

SpringMVC預設提供很多訊息轉換器
比如RequestMappingHandlerAdapter預設載入轉換器:
ByteArrayHttpMessageConverter: 負責讀取二進位制格式的資料和寫出二進位制格式的資料;
StringHttpMessageConverter:   負責讀取字串格式的資料和寫出二進位制格式的資料;
ResourceHttpMessageConverter
:負責讀取資原始檔和寫出資原始檔資料; 
FormHttpMessageConverter:    負責讀取form提交的資料(能讀取的資料格式為 application/x-www-form-urlencoded,不能讀取multipart/form-data格式資料);負責寫入application/x-www-from-urlencoded和multipart/form-data格式的資料;
MappingJacksonHttpMessageConverter:  負責讀取和寫入json格式的資料;
SouceHttpMessageConverter:         負責讀取和寫入 xml 中javax.xml.transform.Source定義的資料;
Jaxb2RootElementHttpMessageConverter
:負責讀取和寫入xml 標籤格式的資料;
AtomFeedHttpMessageConverter:       負責讀取和寫入Atom格式的資料;
RssChannelHttpMessageConverter:      負責讀取和寫入RSS格式的資料;
2. 如何使用訊息轉換器
1、註冊MappingJacksonHttpMessageConverter
<!-- 註解的處理器介面卡 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
		p:messageConverters-ref="messageConverter"
	/>
	
	<util:list id="messageConverter">
		<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
	</util:list>
3. json資料格式:
資料  key:value
value:字串、基本資料型別、物件、陣列
[]:陣列 [value,value]
{}:物件 {資料,資料,資料}
3.1 通過ajax提交json資料到物件
save1.jsp
<script type="text/javascript" src="${ctxPath}/script/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="${ctxPath}/script/js/json2.js"></script>
<script type="text/javascript">
	$(document).ready(function() {
		testRequest();
	});
	
	function testRequest() {
		var jsonData = {userName:'gec',password:'1111'};
		$.ajax("${ctxPath}/saveUser1.do",
				{
					dataType:"json",
					type:"post",
					contentType:"application/json",
					data:JSON.stringify(jsonData),
					async:true , // 預設設定下,所有請求均為非同步請求。如果設定為false,則傳送同步請求
					// 請求成功後的回撥函式。
					success:function(data){
						alert(data);
					},
					// 請求出錯時呼叫的函式
					error:function(){
						alert("資料傳送失敗");
					}
				}	
			
		);
	}
</script>


UserController.java
@RequestMapping("/saveUser1.do")
public String saveUser(@RequestBody User user) {
	System.out.println("user="+user);
	return "success";
}
3.2 通過ajax提交json資料到集合
save2.jsp
<script type="text/javascript">
	$(document).ready(function() {
		testRequest();
	});
	
	function testRequest() {
		var jsonData = [
							{userName:'gec',password:'1111'},
							{userName:'andy',password:'2222'},
							{userName:'ken',password:'3333'}
						];
		$.ajax("${ctxPath}/saveUser2.do",
				{
					dataType:"json",
					type:"post",
					contentType:"application/json",
					data:JSON.stringify(jsonData),
					   	async:true , 
					success:function(data){
						alert(data);
					},
					error:function(){
						alert("資料傳送失敗");
					}
				}	
		);
	}
</script>
UserController.java
@RequestMapping("/saveUser2.do")
public String saveUser2(@RequestBody List<User> users) {
	for (User user : users) {
		System.out.println("user="+user);
	}
	return "success";
}
3.3 通過ajax提交表單資料到物件
save3.jsp

<script type="text/javascript">
	$(document).ready(function() {
		testRequest();
	});
	
	function testRequest() {
		$("#commit").click(function() {
			$.post("${ctxPath}/saveUser3.do",
					$("#userForm").serialize(), 
					function(data) {
						alert(data);
					}
			);
		});
	}
</script>
……
<form id="userForm">
	使用者名稱:<input type="text" name="userName" /><br/>
	密碼:<input type="password" name="password" /><br/>
	<input id="commit" type="button" value="提交"/><br/>
</form>
UserController.java
@RequestMapping("/saveUser3.do")
public String saveUser3(User user) {
	System.out.println("user="+user);
	return "success";
}
4. 如何獲取json資料
1、通過ajax獲取響應json資料
userlist.jsp
<script type="text/javascript">
	$(document).ready(function() {
		testRequest();
	});
	
	function testRequest() {
		$.post("${ctxPath}/userlist.do",
				null, 
				function(data) {
					$.each(data, function() {
						var tr = $("<tr align='center'/>");
						$("<td/>").html(this.userName).appendTo(tr);
						$("<td/>").html(this.password).appendTo(tr);
						$("#booktable").append(tr);
					});
				},"json");
	}
</script>
UserController.java
@RequestMapping("/userlist.do")
	@ResponseBody
	public List<User> userlist() {
		List<User> list = new ArrayList<User>();
		list.add(new User("張三", "111"));
		list.add(new User("張四", "222"));
		list.add(new User("張五", "333"));
		list.add(new User("張六", "444"));
		return list;
	}
5. 簡化SpringMVC的配置檔案
1、<mvc:annotation-driven />

(1) 名稱:使能註解驅動,相當於配置了RequestMappingHandlerMapping和RequestMappingHandlerAdapter等;
(2) 預設載入的轉換器:
ByteArrayHttpMessageConverter: 負責讀取二進位制格式的資料和寫出二進位制格式的資料;
 StringHttpMessageConverter負責讀取字串格式的資料和寫出二進位制格式的資料;
ResourceHttpMessageConverter:負責讀取資原始檔和寫出資原始檔資料; 

FormHttpMessageConverter:負責讀取form提交的資料(能讀取的資料格式為 application/x-www-form-urlencoded,不能讀取multipart/form-data格式資料);負責寫入application/x-www-from-urlencoded和                           multipart/form-data格式的資料;

MappingJacksonHttpMessageConverter:  負責讀取和寫入json格式的資料;
SouceHttpMessageConverter: 負責讀取和寫入 xml 中javax.xml.transform.Source定義的資料;
Jaxb2RootElementHttpMessageConverter:  負責讀取和寫入xml 標籤格式的資料;
AtomFeedHttpMessageConverter:  負責讀取和寫入Atom格式的資料;
RssChannelHttpMessageConverter:  負責讀取和寫入RSS格式的資料;
(3) 另外還預設載入
資料轉換
2、<mvc:default-servlet-handler/>
作用:用/配置前端控制器時,可 以訪問靜態資源(js,圖片等)
6. SpringMVC中的引數繫結
1、能支援Servlet的api
HttpServletRequest物件
HttpServletResponse物件
HttpSession物件
OutputStream物件
2、簡單型別的繫結
3、pojo型別的繫結
4、包裝的pojo型別
5、陣列的繫結
6、List的繫結:
批量新增資料
7、Map的繫結

注意問題:
List和Map不能作為引數存在,否則表單無法提交資料,只能以pojo類的某個屬性存在。

相關推薦

SpringMVC訊息轉換

1. HttpMessageConverter訊息轉換器 概念:將請求資訊----》訊息轉換器-----》物件  物件--------》訊息轉換器-----》響應資訊體訊息轉換器它只針對@RequestBody/@ResponseBody註解或HttpEntity/Resp

擴充套件springMVC訊息轉換來支援jsonp資料格式

1.JSONP是用來解決json跨域問題的技術。即將傳輸的json轉化為js指令碼。 Callback是JSONP的實現的一種方式,例:getData([{"id":1,"title":"XXXX"},{"id":2,"title":"YYYYY"}])。當瀏覽器讀取到fu

JavaEE開發之SpringMVC中的自定義訊息轉換與檔案上傳

上篇部落格我們詳細的聊了《》,本篇部落格依然是JavaEE開發中的內容,我們就來聊一下SpringMVC中的自定義訊息轉發器(HttpMessageConverter)和SpringMVC中的檔案上傳。訊息轉發器在日常開發中是比較常用的,其可以靈活的將使用者發過來的訊息按照自定義的格式進行解析,然後將解析的資

SpringMVC原始碼剖析5:訊息轉換HttpMessageConverter與@ResponseBody註解

轉自 SpringMVC關於json、xml自動轉換的原理研究[附帶原始碼分析] 本系列文章首發於我的個人部落格:https://h2pl.github.io/ 歡迎閱覽我的CSDN專欄:Spring原始碼解析 https://blog.csdn.net/column/details/21851.html 部

springmvc 日期轉換和編碼過濾器 學習筆記

springmvc 日期轉換器和編碼過濾springmvc不能將String類型轉成Date類型,必須自定義類型轉換器 <!-- 編碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</

HttpMessageConverter訊息轉換

版權宣告:本文為博主原創文章,無需授權即可轉載,甚至無需保留以上版權宣告,轉載時請務必註明作者。 https://blog.csdn.net/weixin_43453386/article/details/83615829 HttpMessageConverter訊息轉換器

springmvc 格式轉換

自定義型別轉換器 實現Converter<String, T>  ;字串型別轉換為T型別 package top.lolcl.myblog.controller; import java.text.ParseException; import java.text.Simp

spring boot 自定義訊息轉換

需求分析:在請求返回中,想統一返回的資料格式。在controller層中通過aop中的環繞通知實現了這個功能。但是在轉換的過程中,提示沒有自定義的格式轉換器。所有我們需要自己實現這個轉換器。 實現方式:通過繼承 AbstractHttpMessageConverter這個類來實現功能。 pu

自定義一個自己的訊息轉換

1.自定義個訊息轉換器,支援自己定義的content-type型別.首先準備好測試的controller類; @PostMapping("/") public Object test(@RequestBody UserInfo userInfo) { return

Spring MVC使用fastjson做訊息轉換,與預設Jackson的區別

spring mvc支援自定義HttpMessageConverter接收JSON格式的資料,使用fastjson作為訊息裝換器,只需要在spring的配置檔案中加入如下配置程式碼(需引入fast

Springboot 自定義訊息轉換

@bean public StringHttpMessagerConverter stringHttpMessagerConverter() { StringHttpMessagerConver

@RequestBody和@ResponseBody和訊息轉換機制原理

1、Spring3.1開始使用新的HandlerMapping 和 HandlerAdapter 來支援@Contoller 和@RequestMapping註解處理:處理器對映RequestMappingHandlerMapping和處理器介面卡RequestMapping

Spring MVC -- @Responsebody註解、訊息轉換

@RequestMapping(value = "/query", method = RequestMethod.GET) public void queryFood

mq訊息轉換MessageConverter

1.4訊息轉換器MessageConverter MessageConverter的作用主要有兩方面,一方面它可以把我們的非標準化Message物件轉換成我們的目標Message物件,這主要是用在傳送訊息的時候;另一方面它又可以把我們的Message物件轉換成對應的目標物件,這主要是用在接收訊息的時候。 下

springmvc json轉換配置

1.0 在springmvc 的配置檔案中加入下面程式碼 spring 4.3.5版本 <!-- 避免IE執行AJAX時,返回JSON出現下載檔案 --> <bea

java中的訊息轉換--HttpMessageConverter

目錄: HTTP請求響應模型;基於javax-servlet-api的請求、響應處理介面;基於SpringMVC的請求、響應介面; HTTP請求響應模型 一般情況下,我們使用的最簡單的HTTP請求響應模型就是B/S模型了。 1、客戶端發出http請求,http請求中包

Spring MVC 3.x 訊息轉換

RESTFul或Ajax都是根據一個合約(固定的副檔名或Http請求頭的Accept)來獲得某種格式的資料響應. 不用訊息轉換器也可以實現.來看一看以下示例 @RequestMapping(value="/favorite",method=R

分析Spring MVC自定義訊息轉換

分析 在Spring MVC的請求處理階段大致可以分為以下幾個步驟:根據請求url找到對應的Controller的Method,引數繫結後通過反射執行方法,將執行結果交給檢視解析器響應檢視。 而在這之前需要通過訊息轉化器。Spring Boot底層通過HttpMessag

Spring Boot JSON訊息轉換

package com.lawu.eshop.merchant.api.config; import java.io.IOException; import org.springframework.boot.autoconfigure.condition.Condition

spring mvc底層通過訊息轉換 解析json字串/json物件成JavaBean

講述一個自己寫Controller層的介面的經歷,到現在一共經歷了三種改變: * 介面引數是基本型別; * 介面引數是JOSNObject型別; * 介面引數是JavaBean型別; 每次改變都對spring有了更深入的瞭解,每次改變都讓程式碼變得更加簡