HTTP Status 415 – Unsupported Media Type(使用@RequestBody後postman調接口報錯)

  • 問題:使用SpringMVC框架後,接口中入參對象沒使用@RequestBody註解,形成postman發起post請求,from-data格式請求能夠調通接口,可是raw格式請求調不通接口,而後我加了SpringMVC @ResponseBody 註解,調接口顯示415錯誤。
  • 處理:
    • SpringMVC添加配置、註解:
 1  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
 2         <property name="messageConverters">
 3             <list>
 4                 <ref bean="jsonHttpMessageConverter" />
 5             </list>
 6         </property>
 7    </bean>
 8  
 9    <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
10         <property name="supportedMediaTypes">
11             <list>
12                 <value>application/json;charset=UTF-8</value>
13             </list>
14         </property>
15    </bean>
View Code
    • pom.xml添加jackson包引用:
 1 <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
 2             <dependency>
 3                 <groupId>com.fasterxml.jackson.core</groupId>
 4                 <artifactId>jackson-core</artifactId>
 5                 <version>2.9.6</version>
 6             </dependency>
 7             <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
 8             <dependency>
 9                 <groupId>com.fasterxml.jackson.core</groupId>
10                 <artifactId>jackson-databind</artifactId>
11                 <version>2.9.6</version>
12             </dependency>
13             <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
14             <dependency>
15                 <groupId>com.fasterxml.jackson.core</groupId>
16                 <artifactId>jackson-annotations</artifactId>
17                 <version>2.9.6</version>
18             </dependency>
View Code
    • Ajax請求時沒有設置Content-Type爲application/json。

  • 註釋:按照上面配置完成後,能夠使用raw調用接口中包含@RequestBody註解的接口,可是此時你會發現form-data這種方式訪問接口又調不通了,百度了下,解決以下:
    • form-data 的 Content-Type 的類型是 application/x-www-form-urlencoded,是表單編碼,不一樣的是還能夠提交文件。
    • raw 的話,有幾種,經常使用的是application/json
    • 若是SpringMVC要接受application/json,須要使用 @RequestBody 註解來接收。
    • 也就是說 @RequestBody 註解接收的是application/json格式的參數(json對象),這種參數使用raw傳參能夠自定義格式爲(JSON(application/json)),可是form-data傳參的格式是application/x-www-form-urlencoded的,因此調不通接口。

  • springMVC 若是不進行必要配置的話,只支持x-www-form-urlencoded,若是使用form-data會報400 Bad Request錯誤。
在spring的mvc配置文件中配置對multi的支持便可,以下: <bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">       
</bean> 此時對以上兩種編碼格式都支持。 注意:此時須要引入
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${commons-fileupload.version}</version> </dependency>
相關文章
相關標籤/搜索