错误描述:
最近有个项目需要重写,web后台从c++改成java,有个接口是post请求的,我就自然用的是json格式的解析参数,但是调试的时候一直是没有任何日志,连方法都没有进,只有在测试时返回的415错误。
http 415错误:
HTTP请求415错误 – 不支持的媒体类型(Unsupported media type)
通常有以下情况:
1:检查你的 http 请求头信息,比如 因为 User-Agent 被服务器设置 拒绝请求了;
比如你写的的爬虫,就很有可能因为没有伪装成浏览器,被拒绝请求
user-agent 详情
2:查看你的 http 请求方法,以及服务器端的设置
比如:有一个 强制用 post 请求的接口,你是不是用了非post 请求
3:post 请求参数设置,是不是必须的,json 格式
比如下面,两段代码,
如下 json参数,body
问题确定为post请求参数格式问题,因为前两种可能性都很小。
@requestMapping
requestMapping参数解释:
1)products:是设置返回值得格式,“application/json;charset=UTF-8”
2)consumes:是设置请求data的格式
3)params: 指定request中必须包含某些参数值是,才让该方法处理
4)headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求
请求和返回常用的有三种格式:
1)application/x-www-form-urlencoded: 默认的表单提交格式,不支持文件
2)multipart/form-data: 用于上传文件,同时也支持普通类型的参数
3)application/json: 提交JSON格式的raw数据,适用于AJAX请求和REST风格的接口
问题解决
一开始使用的是json格式解析请求参数,但是前端发送的格式是x-www-form-urlencoded,所以一直出415错误。
出现415或者400错误的原因在网上找的时候有好几种情况。
1、spring MVC配置不对导致的,这个问题已经有高手做了详细的解释了,链接
2、是spring MVC的使用问题,在设置consumes为x-www-form-urlencoded时需要去掉方法参数中的@RequestBody注解。
@RequestMapping(value = "/update_comment",
method = RequestMethod.POST, produces = "application/json;charset=UTF-8",
consumes = "application/x-www-form-urlencoded;charset=UTF-8")
@ResponseBody
public BaseResponse updateComment(@RequestBody ReqUpdateComment reqUpdateComment) {}
@RequestBody ReqUpdateComment reqUpdateComment) {}
需要把红色部分去掉,这个是spring MVC的限制。
具体解决办法和说明是在Stack Overflow上找到的