@RequestBody,415Unsupported Media Type錯誤,解決辦法彙總總有一款適合你

       最近在跟ONENET平臺對接設備數據的時候,從平臺下載的JAVA版本的SDK嵌入到自己的項目中使用,使用POSTMAN測試GET請求的時候是沒問題的,測試POST請求接收數據的時候就報了415錯誤!從網上找了各種解決辦法,沒有一款是適用我這個項目的,通通沒用,後來發現是spring的註解@RequestBody接收數據的問題,後來就替換成原始接收數據的方法就可以了(HttpServletRequest)

       由於SDK用的是BODY來處理的數據,所以我們需要把request中的參數轉成字符串body

public String receive(HttpServletRequest request, HttpServletResponse rsp) throws NoSuchPaddingException, InvalidKeyException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException, IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String body = IOUtils.read(reader);

}

IOUtils用的是dubbo-2.5.3

就這樣困擾了兩天的問題自己發現並自己解決(過程中找過ONNET平臺技術員和設備廠商拉了個羣聊把問題反饋出來一直沒得到解決,最讓我無語的是跟我對接的ONNET平臺技術員是搞PYTHON,設備廠商的技術員是搞C#的跟他們搞對接真痛苦,因爲他們自己的DEMO我不能直接拿來用)

 

下面說說,我這兩天在網上找的解決辦法,一般下面幾種解決辦法都足夠解決你的問題,實在不行就用我上面的最原始的解決辦法:

一、參考的是:https://www.iteye.com/blog/snowolf-1628861

主要就是需要開啓XML核心配置

  1. <context:component-scan base-package="org.zlex.json.controller" />  
  2. <context:annotation-config />  
  3. <mvc:annotation-driven />  

然後pom.xml配置

<dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-webmvc</artifactId>  
        <version>3.1.2.RELEASE</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency>  
    <dependency>  
        <groupId>org.codehaus.jackson</groupId>  
        <artifactId>jackson-mapper-asl</artifactId>  
        <version>1.9.8</version>  
        <type>jar</type>  
        <scope>compile</scope>  
    </dependency>  
    <dependency>  
        <groupId>log4j</groupId>  
        <artifactId>log4j</artifactId>  
        <version>1.2.17</version>  
        <scope>compile</scope>  
    </dependency>  

二、參考的是https://blog.csdn.net/jdk_wangtaida/article/details/85783289

@requestBody註解的使用

1、@requestBody註解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json類型。

2. @RequestBody接收的是一個Json對象的字符串,而不是一個Json對象

解決方案:前端傳參數時,設置content-type類型就可以啦,設置成application/json
三、參考的是https://blog.csdn.net/g_y_x_/article/details/84339648

主要說的是檢查JAR包和配置的問題

1.maven引入jackson包,共3個【重要】
jackson-core
jackson-databind
jackson-annotations

2.springmvc的配置文件【重要】

<mvc:annotation-driven />  

3.沒有自動將包導入WEB-INF/lib中

四、這裏說的是沒有使用瀏覽器請求,被拒POSTMAN沒有模擬瀏覽器POST

我一個同事說使用swagger測是不會包415的,是正常的

使用模擬瀏覽器工具測試

五、說的是JAR包不一致導致的

六、說的是spring3.0和spring4.0使用<mvc:annotation-driven />的差距

3.0的是

MappingJacksonHttpMessageConverter

4.0的是

MappingJackson2HttpMessageConverter
<mvc:annotation-driven>
		<mvc:message-converters>
			<!--<bean class="szsti.kettle.utils.conf.UTF8StringHttpMessageConverter" />-->
			<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
			<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
			<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
			<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
			<!--<bean class="org.springframework.http.converter.SourceHttpMessageConverter"/>
			<bean class="org.springframework.http.converter.XmlAwareFormHttpMessageConverter"/>
			<bean class="org.springframework.http.converter.Jaxb2RootElementHttpMessageConverter"/>-->
		</mvc:message-converters>
	</mvc:annotation-driven>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章