在项目测试中,遇到一个问题,先粘贴一下源码:
@PostMapping("/updateOrders")
public ResponseResult updateOrders(@RequestParam("OrdersId") Long OrdersId,@RequestParam("phone") String phone) {
if (OrdersId != null && StringUtils.isNotBlank(phone)) {
try {
adoptService.updateOrder(OrdersId,phone);
return new ResponseResult(200,"执行成功");
}catch (Exception e){
e.printStackTrace();
return new ResponseResult(410,"修改失败");
}
}
return new ResponseResult(420,"信息为空");
}
以上是修改过后的方案,修改之前的为:
@PostMapping("/updateOrders")
public ResponseResult updateOrders(@RequestBody Adopt adoptOrders) {
if (StringUtils.isNotBlank(adoptOrders.getPhone()) && !StringUtils.equals("null",adoptOrders.getPhone())) {
try {
Adopt adoptOrder = new Adopt();
adoptOrder.setUserId(orders.getUid());
adoptOrder.setPhone(orders.getPhone());
adoptOrder.setAnimal(orders.getA_id());
adoptOrder.setReturnVisit(0);
adoptOrder.setType(0);
adoptOrder.setupdateDate(LocalDateTime.now());
(此处省略一条mybatisPlus的修改数据库方法(update函数))
return new ResponseResult(200,"执行成功");
}catch (Exception e){
e.printStackTrace();
return new ResponseResult(410,"修改失败");
}
}
return new ResponseResult(420,"信息为空");
}
遇到的问题如下:
一开始测试时遇到的问题是不管我传入的表单是什么类型,传入了几个,都会返回执行成功,但是数据库根本没有被修改,但抛出异常并没有被执行,断点调式了修改
数据库的方法,方法执行也没有问题,能够正常传参,所以我把问题归于实体类字段和数据库字段不匹配,但折腾了好久发现并不是,不是字段问题,也不是方法问题,
那就是前端传参问题了,前端参数和后端参数也都是匹配的,唯独不一样的是前端传参少了实体类的几个参数,问题就在这里了,我的if判断语句只判断了表单中的phone
参数,前端表单传值时这个确实是填写了的,所以后端判断这个并不为空,所以执行了if内语句,但我当时并没有发现这个问题,既然if有问题那我就直接修改了if语句,
修改if语句为
if (OrdersId != null)后发现每次都执行信息为空,这下可以肯定自己发现的问题了,就是前端表单于后端表单参数不匹配导致的问题,所以我开始思考自己的接口
设计,发现了自己的设计逻辑问题,这个接口只需要修改phone字段,以及需要OrdersId字段,并不需要修改其他字段,所以我将后端请求体参数变成了请求参数,
并自行编写了修改数据库函数,全部完成后为以上贴出的代码,测试成功.标签:传参,OrdersId,ResponseResult,adoptOrder,表单,修改,new,编写 From: https://www.cnblogs.com/zjDm/p/17763757.html
总结:
后端的请求体参数是实体类时,前端表单传参时要传入实体类全部字段,不可缺少,否则无法识别.