springboot前端post到后端实体映射时
首先实体类是这样的
public class RentOrder{
private Integer id;
private String username;
}
@PostMapping("getListByRentOrder")
public R getListByRentOrder(@RequestBody RentOrder rentOrder){
QueryWrapper<RentOrder> rentOrderQueryWrapper = new QueryWrapper<>();
rentOrderQueryWrapper.like("id",rentOrder.getId());
rentOrderQueryWrapper.like("username",rentOrder.getUsername());
List<RentOrder> list = rentOrderService.list(rentOrderQueryWrapper);
return R.ok().data("list",list);
}
假如前端传入的data是这样的
rentOrder{
id:"",
username:"李白"
}
到了后端映射的实体rentOrder是这样的
rentOder.getId=null
rentOrder.getUsername="李白"
这样会导致你使用模糊查询时,拼接的sql字符串是这样的
select * from rent_order where id like "%null%" and username like "%李白%"
这样查出来的数据往往是空的,因为你的数据库的 id 不可能有like null 的吧
而你期待的其实是这样的
select * from rent_order where id like "%%" and username like "%李白%"
造成这样结果是什么原因呢?
大概是这样的
data() {
return {
searchOrder: {
id:"",
username:"",
}
}
},
**前端在定义数据的时候没有按对应后端的格式定义,就是id本来是int类型,而你写的是string,如果你在前端用到了这个字段,比如你填了一个1,那么后端的实体类是会被映射到的,rentOser.getId()=1
,如果你没有填,后端就不会映射到,rentOser.getId()=null
如果你的后端的id也是String类型就不会存在这种问题
解决方法有很多,这里在后端解决一下
@PostMapping("getListByRentOrder")
public R getListByRentOrder(@RequestBody RentOrder rentOrder){
QueryWrapper<RentOrder> rentOrderQueryWrapper = new QueryWrapper<>();
if (rentOrder.getId()!=null){
rentOrderQueryWrapper.like("id",rentOrder.getId());
}
rentOrderQueryWrapper.like("username",rentOrder.getUsername());
List<RentOrder> list = rentOrderService.list(rentOrderQueryWrapper);
return R.ok().data("list",list);
}