【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 编译,
所以可能出现问题,需要手动引入一些依赖,不过目前版本应该已经优化过。

一、好用的诊断工具

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

问题原因: 依赖引入错误,可能是导入的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();

也就是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>

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

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

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

4.6 模板引擎解析错误

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

你可能感兴趣的:(spring,spring,boot,java,spring)