情况:
后端在接受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
来获取这个工具: