http://www.oschina.net/question/129540_25218
HttpMessageConverter(org.springframework.http.converter.HttpMessageConverter接口) 示例 :
StringHttpMessageConverter 從請求和響應讀取/編寫字符串。默認情況下,它支持媒體類型 text/* 并使用文本/無格式內容類型編寫。
FormHttpMessageConverter 從請求和響應讀取/編寫表單數據。默認情況下,它讀取媒體類型 application/x-www-form-urlencoded 并將數據寫入 MultiValueMap<String,String>。
MarshallingHttpMessageConverter 使用 Spring 的 marshaller/un-marshaller 讀取/編寫 XML 數據。它轉換媒體類型為 application/xml 的數據。
MappingJacksonHttpMessageConverter 使用 Jackson 的 ObjectMapper 讀取/編寫 JSON 數據。它轉換媒體類型為 application/json 的數據。
AtomFeedHttpMessageConverter 使用 ROME 的 Feed API 讀取/編寫 ATOM 源。它轉換媒體類型為 application/atom+xml 的數據。
RssChannelHttpMessageConverter 使用 ROME 的 feed API 讀取/編寫 RSS 源。它轉換媒體類型為 application/rss+xml 的數據。
SourceHttpMessageConverter 處理請求類型 Request type: text/xml, application/xml
從HTTP request和response讀寫javax.xml.transform.Source .支持 DOMSource, SAXSource,StreamSource .
BufferedImageHttpMessageConverter 處理請求類型 Request type:支持Java I/O API,
從HTTP request和response中讀寫java.awt.image.BufferedImage
以上是IBM開源資源庫中的一篇文章,我在這篇文章的基礎上,結合springmvc-showcase總結更詳細更通俗的講解!!
首先進行準備工作:
- <mvc:annotation-driven/> 該片段默認就加載了HttpMessageConverter接口的7種實現(如:StringHttpMessageConverter,MappingJacksonHttpMessageConverter 等)
- 進行請求提交時,需要指定MediaType,不同的MediaType對應的是不同的HttpMessageConverter接口實現類;見MappingJackson2HttpMessageConverter類只接受application/json類型的請求;
- public class MappingJackson2HttpMessageConverter extends
- AbstractHttpMessageConverter implements GenericHttpMessageConverter {
-
- public MappingJackson2HttpMessageConverter() {
-
- super(new MediaType[] {
- new MediaType("application", "json", DEFAULT_CHARSET),
- new MediaType("application", "*+json", DEFAULT_CHARSET) });
- System.out.println("dsfsfsf");
- objectMapper = new ObjectMapper();
- prefixJson = false;
- }
-
- 。。。。
- }
如果進行請求提交和設置mediaType呢?見JS代碼:設置AJAX提交的contentType屬性即可;同時另外一點要注意:JSON字符串中的KEY,VALUE必須使用雙引號,不可以使用單引號;
- $.ajax({
- type : "POST",///springmvc2/page1.mvc
- url : "/springmvc2/json.mvc",//http://127.0.0.1:7001/springmvc2/json.mvc
- contentType : "application/json",
- data: '{"name":"1212","pwd":"我們"}' ,
- dataType:'json',
- success: function(msg){
- alert( "Data Saved: " +msg.name );
- }
- });
-
-
- $("form.readJsonForm").submit(function() {
- var form = $(this);
- var button = form.children(":first");
- <span style="background-color: #ff0000;">var data = form.hasClass("invalid") ?
- "{ \"foo\": \"bar\" }" :
- "{ \"foo\": \"bar\", \"fruit\": \"apple\" }";</span>
- $.ajax({ type: "POST", url: form.attr("action"), <span style="background-color: #ff0000;">data: data, contentType: "application/json",</span> dataType: "text", success: function(text) { MvcUtil.showSuccessResponse(text, button); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, button); }});
- return false;
- });
這些提交的信息如何能夠查看呢?使用chrome內核的瀏覽器的開發者工具:
最后我們如何來控制我們的數據返回格式呢?
http://127.0.0.1:8010/messageconverters/json 它返回的XML格式的內容,其實是MarshallingHttpMessageConverter 轉化后的結果,那我們如何指定轉化的數據類型的(JSON OR XML)
http://127.0.0.1:8010/messageconverters/json.JSON;使用后綴指出他的返回數據格式
http://127.0.0.1:8010/messageconverters/json 在requestHeader設置
Accept:
application/json
JS代碼如下:
- $("a.writeJsonLink").click(function() {
- var link = $(this);
- $.ajax({ url: this.href,
- beforeSend: function(req) {
- if (!this.url.match(/\.json$/)) {
- <span style="background-color: #ff0000;">req.setRequestHeader("Accept", "application/json");</span>
- }
- },
- success: function(json) {
- MvcUtil.showSuccessResponse(JSON.stringify(json), link);
- },
- error: function(xhr) {
- MvcUtil.showErrorResponse(xhr.responseText, link);
- }});
- return false;
- });
本文中講解了MappingJackson2HttpMessageConverter的使用,其他的 HttpMessageConverter都是類似的用法,具體可以看實例。另外官方的案例中的POM缺少相關的依賴內容,請下載我上傳的壓縮包,里面的JAR依賴是完整的。
總結本文內容如下:
1.如何使用HttpMessageConverter進行請求數據的轉化
2.如何使用HttpMessageConverter轉化輸出數據的格式
3.如何使用開發工具進行相關屬性的查看