项目场景:
在跟着瑞吉外卖视频做的时候,一个很简单的套餐需求,因为涉及到新增两个表的数据,所以通过dto来实现对前端数据的接收,在数serviceimp中实现两个表的数据新增。
问题描述
昨天晚上在跟着B站视频做瑞吉外卖的时候,前端传进来的数据菜品集合,后端dto一直拿不到,而且检查过非常多遍,一样的代码,更加奇怪的是,在上一个流程中也有一个dto,两个dto写法一样,就是后面的dto集合一直拿不到数据
一下是Dto中代码
public class setMealDto extends Setmeal{
private List<SetmealDish> setmealDishes;
private String CategoryName;
}
这里是Controller中对实现类方法调用
public R<String> saveMeal(@RequestBody setMealDto mealDto){
setmealService.saveWithDto(mealDto);
return R.success("新增成功");
}
原因分析:
首先我检查了前端是否传了数据进来
在前端F12呼出检查框,看到
证明前端确实是有数据的。
在方法开始是打断点
在断点中发现dto传进来就没有数据,这说明问题一定是出在dto类中的,因为其他的不是dto类的数据是有的,证明controller中的接收方法是没有问题的。
解决方案:
在Dto类中元素加上@JsonProperty(value = "setmealDishes")
加完后dto的代码如下
@Data
public class setMealDto extends Setmeal{
@JsonProperty(value = "setmealDishes")
private List<SetmealDish> setmealDishes;
private String CategoryName;
}
此时直接把数据绑定,这里的value值要与前端参数名称一致。
终于得到数据了。
至于原因我感觉是不是前端传的数据有一个空集合dishList也是list,把空的赋值给了dto中的list,因为dto的写法一定是正确的,因为另一个dto写法一模一样能够接收list数据,虽然但是,猜测而已,bug就这样解决了。