善待你遇到的bug,它只会让你更强大!

在项目前端页面用户注册的时候,点击注册之后总是报空指针异常,我当时一直想的是我前端页面封装model失败了吗?但是根本没有想到是CustomerService是null.

针对这个问题,我的解决办法如下:
  1. 前端debug,看看请求参数是否正确
    F12,点击注册之后,看到浏览器响应码为200,由于是post请求,请求参数体正确。但是后台就报空指针。很明显,是后台程序的问题。


    nullPointException.png
  2. 后端debug
    在开启debug模式之后,我在CustomerAction的singUpCustomerService.save(model)方法前打了断点,点击注册按钮之后,进入debug模式,在点击F5进入 CustomerService.save(model)方法中,走完这一步,我在debug界面右上看到了所有参数的值,这时候才发现原来不是model为null,
    而是CustomerService为null。


    CustomerService.png

    Customer.png

为什么CustomerService为null呢?思前想后不得其解,因为我是在crm项目写的CustomerService和CustomerServiceImpl,最后通过webService发布的。我当时以为是我wsimport下载完webService代码之后没有更新项目的原因。在更新maven,install之后,运行之后还是会出现空指针异常。

  1. 最后思路只能是spring配置文件了,经过查找,问题就在这里!
    以下是我最初配置的spring配置文件:因为bos_fore项目只有web层,因此就大意只配置了webService服务代理对象,而忽略了spring注解的扫描包的配置。
    <jaxws:client id="customerClient" 
                  address="http://localhost:8888/bos_crm/service/customer" 
                  serviceClass="cn.baidu.cxf.service.CustomerService">
    </jaxws:client>
    
    正确配置应该加上:
    <!--配置注解的扫描包  -->
    <context:component-scan base-package="cn.baidu.customer.action"></context:component-scan>
    
    

问题解决:因为我们把Action的创建交给了spring接管,所以配置spring扫描包这件事一定不能省略。不然配置的Autowired就不能成功,即不能给CustomerService注入。
之所以能进入Action方法中是因为web.xml中配置的拦截器,只要配置了拦截器,只要访问路径成功就能进入action内部。而注入成功与否是靠注解或者set方法。

善待你的遇到的所有bug,它只会让你更强大!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,997评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,974评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,612评论 25 708
  • 冬天已经来到了,整个世界顿时变得冷嗖嗖。,北风吼叫,带着不断的冬雨,冬天的雨不同与其他的季节的雨,这雨更冷,...
    2020级1班阅读 391评论 35 7
  • 可曾有几部影视作品,看完了能叫你沉到思绪里,长久无法超脱。我已许久没有过这样的感觉了,如同一曲深邃而忧伤的旋律,在...
    逸之阅读 2,243评论 9 7