加了@RequestBody注解后,报415(媒体类型不匹配)错误

导读:本篇文章讲解 加了@RequestBody注解后,报415(媒体类型不匹配)错误,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

加了@RequestBody注解后,报415(媒体类型不匹配)错误

前端ajax请求,后端使用@RequestBody接收,报出415请求数据格式错误

错误原因:

springMVC无法读取ajax设置好的dataType并以对应的方式处理请求头,进而无法处理json数据

解决办法:

在maven中引入Jackson相关jar包,并在springMVC的xml中引入相关配置,maven和springMVC的相关代码如下:

maven:

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>
  
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.6</version>
        </dependency>
  
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.6</version>
        </dependency>

springMVC:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <!-- 设置返回字符串编码 -->
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name = "supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <!-- json转换器 -->
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>

其他原因:

注:在jsp中使用ajax提交时出现了下面的问题: 415 (Unsupported Media Type), 可能出现的原因如下:

  1. dataParam 格式错误,不符合json字符串规范
  2. dataParam 参数不能绑定到控制器方法的参数上面,不是一一对应
  3. 没有在ajax提交时设置contentType
    contentType指的是前台传递到后台的格式,dataType指的是由后台传到前台的格式
  4. jackson的jar包不对或者不全:
    不应该使用org.codehaus.jackson下面的jackson.jar, 应该使用com.fasterxml.jackson.core下面的jackson-core和jackson-databind 的jar包
  5. 加上<mvc annotation-driven>

后端使用@RequestBody接收前端传来的数据踩坑

踩坑①

@RequestBody接收json字符串,只能使用post的提交方式
前端直接复制了相似功能页面的js,该页面是使用的get的提交方式
但前端报错500,后端报错提示
在这里插入图片描述

踩坑②

后将.get(URL,data,callback)修改为.post(URL,data,callback);
$.post(URL,data,callback);
必需的 URL 参数规定您希望请求的 URL。
可选的 data 参数规定连同请求发送的数据。
可选的 callback 参数是请求成功后所执行的函数名
但前端继续报错500,后端报错提示
在这里插入图片描述

踩坑③

后端提示不支持Content type 为’application/x-www-form-urlencoded;charset=UTF-8’的格式,百度查了一下.post(URL,data,callback)只是预配置.ajax调用的快捷方式,并不能修改contentType的类型
所以将$.post方法修改为了&.ajax方法
设置

type: “post”,
url: ctx + url,
data: JSON.stringify(allData),
dataType: “json”,
contentType:“application/json;charset=utf-8”,

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/85534.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!