• 【SpringBoot】SpringBoot项目开发报错解决记录


    1. JDK环境配置

    JavaHome:jdk存放位置,作为一个环境变量。
    ClassPath:存放类的路径,也就是说项目开发中使用到的一些类会从该目录下中找,比如 java.lang javax等包。

    2. maven

    maven有一个本地仓库: localRespitory 本地仓库就是我们使用依赖下载存放的位置。

    镜像问题:需要配置阿里云镜像,但是阿里云镜像会过期或者更新地址,注意实时更新。

    找不到包问题:有时候下载到本地仓库的类会少(可能是引入依赖的版本问题),缺哪个包就从maven中找哪个包。

    Maven Target文件夹: target文件夹是用来存放项目构建后的文件和目录、jar包、war包、编译的class文件,都是maven构建时生成的。

    Maven仓库地址

    镜像地址

    3. diamond表达式问题
    List<Integer> list = new ArrayList<>();
    这就是Diamond表达式,自动做一个类型推断
    属于JDK 7 的新特性,但是由于 Maven项目 使用JDK6 编译,
    所以可能出现问题,需要手动引入一些依赖,不过目前版本应该已经优化过。
    
    • 1
    • 2
    • 3
    • 4

    一、好用的诊断工具

    Arthas || 阿里云知行动手实验室

    二、常见报错信息

    Cannot instantiate interface org.springframework.boot.SpringApplicationRunListener

    Exception in thread "main" java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.boot.SpringApplicationRunListener : org.springframework.boot.context.event.EventPublishingRunListener
        at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:475)
        at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:457)
        at org.springframework.boot.SpringApplication.getRunListeners(SpringApplication.java:445)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:328)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332)
        at cn.learn.springboot1.Springboot1Application.main(Springboot1Application.java:12)
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.context.event.EventPublishingRunListener]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/springframework/util/ClassUtils
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:221)
        at org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:471)
        ... 6 more
    Caused by: java.lang.NoClassDefFoundError: org/springframework/util/ClassUtils
        at org.springframework.aop.framework.AopProxyUtils.<clinit>(AopProxyUtils.java:53)
        at org.springframework.context.event.AbstractApplicationEventMulticaster.addApplicationListener(AbstractApplicationEventMulticaster.java:108)
        at org.springframework.boot.context.event.EventPublishingRunListener.<init>(EventPublishingRunListener.java:64)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:208)
        ... 7 more
    Caused by: java.lang.ClassNotFoundException: org.springframework.util.ClassUtils
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        .15 more
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    问题原因: 依赖引入错误,可能是导入的jar包版本不对,也可能是导入了多个版本版本冲突了,项目不知道该加载哪个jar包下的类。

    Caused by: org.springframework.beans.BeanInstantiationException

    我就是多引入了一个 org.springframework.beans 依赖,导致冲突。

    四、 SpringMVC项目报错信息
    4.1 配置tomcat启动问题
    1. 首先下载tomcat。
    2. 其次,傻瓜式安装,并配置环境变量。
    3. 在idea中装一个插件tomcat,然后edit configure 添加一个tomcat 运行即可。
    4. 运行出现报错问题:要不就是tomcat路径没配好、要不就是端口占用了。
    4.2 控制台打印乱码问题

    这个完全是编码格式不同导致,idea控制台默认编码格式未GBK,但是tomcat log日志编码为UTF-8,修改conf下log.propertites编码格式即可。

    4.3 servelt init问题

    Could not initialize class org.springframework.beans.factory.BeanDefinitionStoreException

    不能初始化bean,根本原因是在模板引擎出的问题:

    org/thmleaf/context/ 原因就是我有一个controller中没有model,但是返回的视图需要model 所以报错。

    4.4 Http Converter 错误

    HttpMessageConverter(报文信息转换器)
    将请求报文转换为Java对象。
    将Java对象转换为响应报文。

    我们最常用的就是使用 @ResponseBody 将Java对象转换为响应报文,然后直接作为相应response bdoy 文本传回浏览器。

    当然 @ResponseBody 和 resopnse.getWriter.print(“ ”) 非常类似,其实就是将返回数据直接写入响应体中。

    出现转换错误,很有可能就是返回值不是文本形式,需要将返回值写成响应体需要的文本形式。

    22:28:15.601 [http-nio-8081-exec-129] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class com.atbjtu.mvc.bean.Employee]

    4.5 org.springframework.web.servlet.DispatcherServlet - Failed to complete request: java.lang.NullPointerException

    可能是bean没有注入,有可能是只能通过id获取bean。

    java.lang.NullPointerException
    com.atbjtu.mvc.Controller.fileController.testUp(fileController.java:53)

    	
    @RequestMapping("/testUp")
        public String testUp(MultipartFile photo, HttpSession session) throws IOException {
            //获取上传的文件的文件名
    **53**        String fileName = photo.getOriginalFilename();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    也就是photo 没有绑定上对象。

    没绑定上对象的原因有很多:1、xml中配置bean错误。 2、可能form表单中出问题,比如上传文件

    <form th:action="@{/testUp}" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="photo">
        上传文件:<input type="submit" value="shangchuan">
    form>
    
    • 1
    • 2
    • 3
    • 4

    其实发送的是二进制文件,二进制文件放在,photo 为键的键值对中,所以

    @RequestMapping("/testUp")
        public String testUp(MultipartFile photo, HttpSession session) throws IOException {
    
    • 1
    • 2

    controller 中要同名,否则就算初始化bean,也对应不上参数。

    4.6 模板引擎解析错误

    1、前端代码错了。
    2、控制器返回的界面不存在。
    3、前端界面需要model数据,但是控制器没能返回model数据。

  • 相关阅读:
    使用Puppeteer爬取地图上的用户评价和评论
    使用 Echarts 插件实现柱状图功能
    LeetCode | 只出现一次的值(python解法)
    【游戏引擎Easy2D】场景和文本,不同的输出方式
    给VSCode插上一双AI的翅膀
    989. 数组形式的整数加法
    LeetCode 第 307 场周赛 复盘
    Springboot项目log4j与logback的Jar包冲突问题
    课题学习(一)----静态测量
    记一次提升18倍的性能优化
  • 原文地址:https://blog.csdn.net/weixin_44627672/article/details/126453619