发货接口测试成功,然后接着完成订单测试说空指针异常,URL测试地址是对的

发货接口测试成功,然后接着完成订单测试说空指针异常,URL测试地址是对的

package com.hw.springbootmall.controller;

import com.github.pagehelper.PageInfo;
import com.hw.springbootmall.common.ApiResponseObj;
import com.hw.springbootmall.exception.MallExeception;
import com.hw.springbootmall.service.OrderService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Author: Aiver
 * @Date: 2023/02/12~~12:19
 * @Description:订单后台管理
 */
@RestController
//下面有完结订单,管理员和用户都可以完结订单。管理员和用户也可以访问,所以注释了这个admin的校验拦截,加在下面需要拦截验证管理员身份登陆
//@RequestMapping("/admin/order")
public class OrderAdminController {
    @Autowired
    OrderService orderService;

    @ApiOperation(value = "管理员订单列表")
    @GetMapping("/admin/order/listOrderForAdmin")
    public ApiResponseObj listOrderForAdmin(@RequestParam Integer pageNum ,@RequestParam Integer pageSize){
        PageInfo pageInfo = orderService.listForAdmin(pageNum, pageSize);
        return ApiResponseObj.success(pageInfo);
    }

    @ApiOperation(value = "管理员订单发货")
    @PostMapping("/admin/order/adminDeliveredOrder")
    public ApiResponseObj adminDeliveredOrder(@RequestParam String orderNo) throws MallExeception {
        orderService.deliver(orderNo);
        //业务逻辑就是修改订单状态,0是已取消订单,10未付款,20已付款,30已发货,40交易完成
        return ApiResponseObj.success();
    }

    /**
     * 管理员和用户都可以完结订单
     * @param orderNo
     * @return
     * @throws MallExeception
     */
    @ApiOperation(value = "管理员或者订单交易完成")
    @PostMapping("/orderFinish")
    public ApiResponseObj orderFinish(@RequestParam String orderNo) throws MallExeception {
        orderService.finish(orderNo);
        //业务逻辑就是修改订单状态,0是已取消订单,10未付款,20已付款,30已发货,40交易完成
        return ApiResponseObj.success();
    }
}
//发货
@Override
public void deliver(String orderNo) throws MallExeception {
    Order order = orderMapper.selectByOrderNo(orderNo);
    //查不到订单,报错
    if (order == null) {
        throw new MallExeception(ExceptionEnum.ORDER_NOT_EXIT);
    }
    if (order.getOrderStatus() == Quantity.OrderStatusEnum.PAID.getCode()) {
        //如果订单状态是已支付,那么就发货并修改为发挥状态码
        order.setOrderStatus(Quantity.OrderStatusEnum.DELIVERED.getCode());
        order.setDeliveryTime(new Date());
        orderMapper.updateByPrimaryKeySelective(order);
    } else {
        throw new MallExeception(ExceptionEnum.WRONG_ORDER_STATUS);
    }
}
@Override
public void finish(String orderNo) throws MallExeception {
    Order order = orderMapper.selectByOrderNo(orderNo);
    //查不到订单,报错
    if (order == null) {
        throw new MallExeception(ExceptionEnum.ORDER_NOT_EXIT);
    }
    //如果是普通用户,就要校验订单的所属
    boolean isAdmin =  userService.isAdmin(UserFilter.user);
    boolean orderBelongToUser = order.getUserId().equals(UserFilter.user.getId());
    if (!isAdmin && !orderBelongToUser) {
        //普通用户而且也不属于他自己的订单
        throw new MallExeception(ExceptionEnum.NOT_YOUR_ORDER);
    }
    //发货后可以完结订单
    if (order.getOrderStatus() == Quantity.OrderStatusEnum.DELIVERED.getCode()) {
        order.setOrderStatus(Quantity.OrderStatusEnum.FINISHED.getCode());
        order.setEndTime(new Date());
        orderMapper.updateByPrimaryKeySelective(order);
    } else {
        throw new MallExeception(ExceptionEnum.WRONG_ORDER_STATUS);
    }
}

只有这一行报错

[02:12 13:18:41.455] [ERROR] [com.hw.springbootmall.exception.GlobalExceptionHandler] - 系统异常来的java.lang.NullPointerException

相关截图:

https://img1.sycdn.imooc.com//climg/63e8779509a70b9717390877.jpg

https://img1.sycdn.imooc.com//climg/63e877a60930282517030838.jpg


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小小 2023-02-12 15:28:00

同学你好,使用管理员登录测试下订单列表,查看是否包含当前订单及当前订单的状态。若订单列表中包含当前订单,则建议在finish方法上增加断点并使用debug模式测试运行程序,查看空指针异常具体位置,准确定位问题。

祝学习愉快~

  • 提问者 weixin_慕少5379513 #1

    打这么多断点都没用

    https://img1.sycdn.imooc.com//climg/63e8e58f09d9f08125711440.jpg

    2023-02-12 21:11:47
  • 同学你好

    1. 建议将异常类代码粘贴上传至问答区。

    2. 查看管理员订单列表中是否存在当前订单,例如:

      https://img1.sycdn.imooc.com//climg/63e99abc09da525b07820927.jpg

    3. 运行时是否有进入debug模式,例如:

      https://img1.sycdn.imooc.com//climg/63e99b1a093501fd14200180.jpg

      如果没有则建议尝试在如下位置增加断点后运行程序。

      https://img1.sycdn.imooc.com//climg/63e99cb109d8df0108140196.jpg

    4. 另建议清除IDEA缓存,重启程序测试运行。

    祝学习愉快~

    2023-02-13 10:21:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师