zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    软件项目技术点(2)——Canvas之坐标系转换
    软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale
    用html5的canvas和JavaScript创建一个绘图程序
    javascript学习之BOM
    HTML5 之拖放(drag与drop)
    fluent-ffmpeg 常用函数
    ffmpeg用法及如何使用fluent-ffmpeg
    解决js动态改变dom元素属性后页面及时渲染问题
    软件项目技术点(8)—— canvas调用drawImage绘制图片
    Oracle数据库rownum用法集锦
  • 原文地址:https://www.cnblogs.com/LJing21/p/10485146.html
Copyright © 2011-2022 走看看