欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC 中HttpMessageConverter簡介和Http請求415 的問題

 更新時間:2016年07月07日 09:59:01   投稿:lqh  
本文介紹且記錄如何解決在SpringMVC 中遇到415 Unsupported Media Type 的問題,并且順便介紹Spring MVC的HTTP請求信息轉換器HttpMessageConverter

一.問題描述:

在SprinvMVC的Web程序中,我在頁面發(fā)送Ajax 的POST請求,然后在服務器端利用@requestBody接收請求body中的參數(shù),當時運行過程中,我想服務器發(fā)送Ajax請求,瀏覽器一直反饋415 Unsupported Media Type或者400的狀態(tài)碼,以為是Ajax寫的有問題。便查找了半天資料,才發(fā)現(xiàn)spring-mvc.config文件的配置中少了東西,當然也有可能是你真的在Ajax中缺少了對Content-Type參數(shù)的設置。分析后應該是我springMVC-config.xml文件配置有問題。
(注):400:(錯誤請求) 服務器不理解請求的語法。 415:(不支持的媒體類型) 請求的格式不受請求頁面的支持。

二.解決方法: 

 在springMVC-config.xml文件中,增加了一個StringHttpMessageConverter請求信息轉換器,配置片段如下:

<!--- StringHttpMessageConverter bean -->
< bean id = "stringHttpMessageConverter" class = "org.springframework.http.converter.StringHttpMessageConverter"/>
 
<!-- 啟動Spring MVC的注解功能,完成請求和注解POJO的映射 -->
< bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
 < property name= "messageConverters" >
 < list>
  < ref bean= "mappingJacksonHttpMessageConverter" />
  <!-- 新增的StringMessageConverter bean-->
  < ref bean= "stringHttpMessageConverter" />
  < ref bean= "jsonHttpMessageConverter" /> 
  < ref bean= "formHttpMessageConverter" />
 </ list>
 </ property>
</ bean>

三.HttpMessageConverter請求信息轉換器簡介:

HttpMessageConverter接口指定了一個可以把Http request信息和Http response信息進行格式轉換的轉換器。通常實現(xiàn)HttpMessageConverter接口的轉換器有以下幾種:
ByteArrayHttpMessageConverter: 負責讀取二進制格式的數(shù)據(jù)和寫出二進制格式的數(shù)據(jù);
StringHttpMessageConverter:   負責讀取字符串格式的數(shù)據(jù)和寫出二進制格式的數(shù)據(jù);
 ResourceHttpMessageConverter負責讀取資源文件和寫出資源文件數(shù)據(jù);
FormHttpMessageConverter:       負責讀取form提交的數(shù)據(jù)(能讀取的數(shù)據(jù)格式為 application/x-www-form-urlencoded,不能讀取multipart/form-data格式數(shù)據(jù));負責寫入application/x-www-from-urlencoded和multipart/form-data格式的數(shù)據(jù);
MappingJacksonHttpMessageConverter:  負責讀取和寫入json格式的數(shù)據(jù);
SourceHttpMessageConverter:                   負責讀取和寫入 xml 中javax.xml.transform.Source定義的數(shù)據(jù);
Jaxb2RootElementHttpMessageConverter:  負責讀取和寫入xml 標簽格式的數(shù)據(jù);
AtomFeedHttpMessageConverter:              負責讀取和寫入Atom格式的數(shù)據(jù);
RssChannelHttpMessageConverter:           負責讀取和寫入RSS格式的數(shù)據(jù);

更多關于HttpMessageConverter的信息請看:

http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/HttpMessageConverter.html

四.HttpMessageConverter請求信息轉換器執(zhí)行流程:

當用戶發(fā)送請求后,@Requestbody 注解會讀取請求body中的數(shù)據(jù),默認的請求轉換器HttpMessageConverter通過獲取請求頭Header中的Content-Type來確認請求頭的數(shù)據(jù)格式,從而來為請求數(shù)據(jù)適配合適的轉換器。例如contentType:applicatin/json,那么轉換器會適配MappingJacksonHttpMessageConverter。響應時候的時候同理,@Responsebody注解會啟用HttpMessageConverter,通過檢測Header中Accept屬性來適配的響應的轉換器。
 

總結:

當在使用SpringMVC做服務器數(shù)據(jù)接收時,尤其是在做Ajax請求的時候,尤其要注意contentType屬性,和accepte 屬性的設置,在springmvc-config.xml中配置好相應的轉換器。當我們在用SpringMVC做 Ajax 請求的時候,有的做法用response.getWriter().print()的方法,還有更好的方法就是添加@Responsebody注解,直接返回Map類型的數(shù)據(jù),轉換器自動轉換為JSON數(shù)據(jù)類型。

相關文章

  • Spring?Security配置保姆級教程

    Spring?Security配置保姆級教程

    Spring?Security是一個功能強大且可高度自定義的身份驗證和訪問控制框架。它是保護基于Spring的應用程序的事實上的標準。Spring?Security是一個專注于為Java應用程序提供身份驗證和授權的框架
    2023-02-02
  • Spring Boot實現(xiàn)分布式鎖的自動釋放的示例代碼

    Spring Boot實現(xiàn)分布式鎖的自動釋放的示例代碼

    在實際開發(fā)中,我們可以使用 Redis、Zookeeper 等分布式系統(tǒng)來實現(xiàn)分布式鎖,本文將介紹如何使用 Spring Boot 來實現(xiàn)分布式鎖的自動釋放,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • JVM內(nèi)存結構劃分實例解析

    JVM內(nèi)存結構劃分實例解析

    這篇文章主要介紹了JVM內(nèi)存結構劃分實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot中的@EnableConfigurationProperties注解原理及用法

    SpringBoot中的@EnableConfigurationProperties注解原理及用法

    在SpringBoot中,@EnableConfigurationProperties注解是一個非常有用的注解,它可以用于啟用對特定配置類的支持,在本文中,我們將深入探討@EnableConfigurationProperties注解,包括它的原理和如何使用,需要的朋友可以參考下
    2023-06-06
  • Java三大特性之封裝詳解

    Java三大特性之封裝詳解

    面向對象編程語言是對客觀世界的模擬,客觀世界里成員變量都是隱藏在對象內(nèi)部的,外界無法直接操作和修改。?封裝可以被認為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。本文將來和大家詳細說說Java中的封裝,需要的可以了解一下
    2022-10-10
  • 詳解Java如何實現(xiàn)自定義注解

    詳解Java如何實現(xiàn)自定義注解

    注解(Annotation),也叫元數(shù)據(jù)。一種代碼級別的說明。它是JDK1.5及以后版本引入的一個特性,與類、接口、枚舉是在同一個層次。本文將通過示例詳解Java如何實現(xiàn)自定義注解,需要的可以參考一下
    2022-06-06
  • Java之springcloud Sentinel案例講解

    Java之springcloud Sentinel案例講解

    這篇文章主要介紹了Java之springcloud Sentinel案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 基于Eclipse中SVN圖標不顯示的解決方法

    基于Eclipse中SVN圖標不顯示的解決方法

    本篇文章是對Eclipse中SVN圖標不顯示的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Python文件高級操作函數(shù)之文件信息獲取與目錄操作

    Python文件高級操作函數(shù)之文件信息獲取與目錄操作

    這篇文章主要介紹了Python文件高級操作函數(shù)之文件信息獲取與目錄操作,在Python中,內(nèi)置了文件(File)對象。在使用文件對象時,首先需要通過內(nèi)置的open()方法創(chuàng)建一個文件對象,然后通過該對象提供的方法進行一些基本文件操作,需要的朋友可以參考下
    2023-05-05
  • Eclipse轉Itellij IDEA導入Git/svn本地項目的詳細步驟

    Eclipse轉Itellij IDEA導入Git/svn本地項目的詳細步驟

    這篇文章主要介紹了Eclipse轉Itellij IDEA導入Git/svn本地項目,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論