POST http://localhost:8081/xxx/register 415 (Unsupported Media Type)

qs.stringify() 和JSON.stringify()的区别https://www.cnblogs.com/dujishi/p/8859207.html

var a = {name:'LIHAO',age:10};
 
qs.stringify(a)     // 'name=LIHAO&age=10'
JSON.stringify(a)   // '{"name":"LIHAO","age":10}'
 
var a = '{name:"LIHAO",age:10}';
qs.parse(a)         //{ '{name:"LIHAO",age:10}': '' }
JSON.parse(a)       //{ name: 'LIHAO', age: '10' }
var a=[{a:123},{a:345}]
qs.stringify(a)  //'0[a]=123&1[a]=345'
后端是@RequestBody 用 content-type = application/json 
 
后端是@RequestParam 用 content-type = application/x-www-form-urlencoded

我vue中使用了JSON.stringify(a)后,出现了POST http://localhost:8081/xxx/register 415 (Unsupported Media Type)的报错。

在查找资料后,找到:“415错误的解释是说,服务器无法处理请求附带的媒体格式,不明白什么意思,一开始以为是后台设置没办法解析,后来用postman、swagger请求,都可以成功,确定是我请求的问题,查看了HTTP请求头部文件,发现content-type跟我们的json格式不同”

Accept代表发送端(客户端)希望接受的数据类型。

比如:Accept:text/xml(application/json),
代表客户端希望接受的数据类型是xml(json )类型
Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。

比如:Content-Type:text/html(application/json) ,
代表发送端发送的数据格式是html(json)。
 

 我的解决办法是在main.js中增加:

axios.defaults.headers.post['Content-Type'] = 'application/json';

(我配置了全局的请求头Content-Type=application/json之后,把后端接受参数全改成application/json)

------------------------------------------

后面我使用get方法时又出现了问题,报错required request body is missing。

1.网上查阅资料得知:

Get和delete:发送的参数是参数格式(?name=章三&age=20),不能发送json数据

Post和put:发送的参数是json格式({“name”:“章三”,“age”:20})

(JSON中对象的属性名必须是双引号,属性值如果是字符串也必须是双引号)

application/x-www-form-urlencodedname=章三 &age=20

application/json{“name”:“章三”,“age”:20}

2.下面是1版的API文档:

#### (POST)    /user/login         用户登录

- 请求地址:    http://localhost:8080/user/login?uname={uname}&password={password}

可以看出与1.矛盾的地方:在用post请求格式时,采用了参数格式

下面是第2版的API文档:

#### (POST)    /user/login         用户登录

- 请求地址:    http://localhost:8080/user/login

- 请求参数:     

userinfoForm:{

    uname        string #用户名

    password    string #密码

}

可以看出:在用post请求格式时,采用了json格式

在第2版的时候,我配置了全局的请求头application/json,我使用登陆和创建用户的功能都成功了,这是因为刚好这两个功能都是post,采用json格式。而我使用搜索用户功能的时候,一直在报错required request body is missing。

3.

我当时以为问题在只于请求头中Content-Type。我以为只要Content-Type与数据传输格式对应就行,但是忽略了数据传输格式是由请求方式是post还是get等决定的。

如果后端接受参数全改成application/json,但在使用get方法时,接收参数并不是json格式。

本来打算后端按照请求方法改成对应的请求参数,然后我把前端加一个拦截器,在请求准备发送时根据请求方法重新配置正确的请求头以及数据格式。

但是后端按照请求方法改成对应的请求参数之后,我没加拦截器就成功了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值