后端接受前端axios的Post请求数据的注意事项

情况:
后端在接受Post请求数据时,如果接受的为一个json对象,并且json数据与实体类对象的属性并不完全匹配
eg:

{"name":"达达","image":"","cids":"86,121","letter":"D"}
private Long id;
    private String name;// 品牌名称
    private String image;// 品牌图片
    private Character letter;
public ResponseEntity<Void> saveBrand(@RequestBody Brand brand)

需要加上@RequestBody注解,并且在对象属性与json数据不匹配时,只能接收到相匹配的属性字段,对于此处的cids无法进行接收(这里没有去测试是否会直接报错)

public ResponseEntity<Void> saveBrand(@RequestBody Brand brand)

解决方案:
1.在实体类中添加相应的Json属性字段来进行接受
(不推荐,在生产环境中频繁改动实体类会引起很多问题)

2.从根源上解决问题,让前端发送方便后台接收的Json格式
原先的axios请求

this.$http({
            method: this.isEdit ? 'put' : 'post',
            url: '/item/brand',
            data: params
          }).then(() => {

发送的json数据

{"name":"达达","image":"","cids":"86,121","letter":"D"}

改造后的请求及发送的数据

this.$http({
            method: this.isEdit ? 'put' : 'post',
            url: '/item/brand',
            data: this.$qs.stringify(params)
          }).then(() => {

发送的数据

name=%E8%BE%BE%E8%BE%BE&image=&cids=86%2C5&letter=D

此时便可通过这种参数列表进行接收

public ResponseEntity<Void> saveBrand(Brand brand,
						@RequestParam("cids") List<Long> cids)

这里使用的$qs:
QS是一个第三方库,可以用npm install qs --save来安装
Query String,请求参数字符串。

什么是请求参数字符串?例如: name=jack&age=21

QS工具可以便捷的实现 JS的Object与QueryString的转换。

在项目中,将QS注入到了Vue的原型对象中,可以通过this.$qs来获取这个工具:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值