Spring Boot开发时遇到的一系列问题及解决办法总结
问题一
Spring Boot
扫描包提示找不到mapper
的问题,异常信息内容:
Consider defining a bean of type in your configuration
分析原因:Spring Boot
项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描,“Application类”是指Spring Boot
项目入口类。如果Application类所在的包为:com.yoodb.blog,则只会扫描com.yoodb.blog包及其所有子包,如果service或dao所在包不在com.yoodb.blog及其子包下,则不会被扫描。
解决方法:
方式一:使用注解@ComponentScan(value=”com.yoodb.blog”)
,其中,com.yoodb.blog
为包路径。
方式二:将启动类Application放在上一级包中,注意的是Application
启动类必须要保证在包的根目录下。
问题二
启动Spring Boot
时,,抛出异常信息如下:
Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package
application.Java
类文件内容如下:
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.boot.SpringApplication; @Controller @SpringBootApplication @Configuration public class HelloApplication { @RequestMapping("hello") @ResponseBody public String hello() { return "hello world!"; } public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } }
分析原因:Spring Boot
启动时,抛出“** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.
”警告信息,这是由于application.Java
文件不能直接放在main/java
文件夹下,必须要建一个包把它放进去。
解决办法:Spring Boot
在写启动类的时候如果不使用@ComponentScan
指明对象扫描范围,默认指扫描当前启动类所在的包里的对象,如果当前启动类没有包,则在启动时会抛出上述警告信息,导致项目出错。
问题三
Spring Boot
连接数据库时,抛出异常信息如下:
caused by: java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile
分析原因:这是由于缺少javassist.jar
包导致启动失败
解决办法:通过Eclipse执行Maven命令重构项目:Maven
-Update Project
,等待下载jar包即可,若还是失败请手动添加javassist.jar
包的pom.xml
配置信息。
Spring Boot
使用spring-data-jpa
插件,抛出异常信息如下:
caused by: java.lang.illegalargumentexception: Not a managed type: class entity.User
分析原因:这是由于Spring Boot
未找到实体对象指定的类名,缺少jpa entity
配置路径
解决办法:在Repository
配置类前面添加注解@EntityScan('entity对应的包路径')
。
问题四
Spring Boot
返回json字符串,增加APPLICATION_JSON
参数代码如下:
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
在添加APPLICATION_JSON
参数后,抛出“APPLICATION_JSON cannot be resolved or is not a field
”异常信息。
分析原因: Bean
实体中存在getX
或setX
方法,但是没有这个x属性,将导致json
转换失败,抛出“APPLICATION_JSON cannot be resolved or is not a field
”异常信息。
解决办法:去掉不存在属性的getX
或setX
方法或者增加上改属性即可。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java利用序列化实现对象的深拷贝
浅拷贝 对象实现的接口Cloneable的clone()方法存在一个缺陷,它并不会将对象的所有属性全部拷贝过来,而是有选择性的拷贝,即浅拷贝!基本规则如下: 1、 基本类型 如果变量是基本很类型,则拷贝其值,比如int、float等。 2、 对象 如果变量是一个实例对象,则拷贝其地址引用,也就是说此时新对象与原来对象是公用该实例变量。 3、 String字符串 若变量为String字符串,则拷贝其地址引用。但是在修改时,它会从字符串池中重新生成一个新的字符串,原有字符串对象保持不变。 所以:浅拷贝只是Java提供的一种简单的拷贝机制,不便于直接使用。 利用序列化实现对象的深拷贝 如何利用序列化来完成对象的拷贝呢?在内存中通过字节流的拷贝是比较容易实现的。把母对象写入到一个字节流中,再从字节流中将其读出来,这样就可以创建一个新的对象了,并且该新对象与母对象之间并不存在引用共享的问题,真正实现对象的深拷贝。 public class CloneUtils { @SuppressWarnings("unchecked") public static <T extends Ser...
-
下一篇
数据结构(Java)-持续更新补充
复习一下数据结构,巩固一下基础。之后打算再学一下算法,之前刷题总感觉摸不清门道,应该是概念没彻底搞明白。 栈 import java.util.Arrays; public class Stack { private int size; private int[] array; public Stack() { this(10); } public Stack(int init) { if(init <= 0) { init = 10; } array = new int[init]; } public void push(int item) { if(size == array.length) { array = Arrays.copyOf(array, size * 2); } array[size++] = item; } public int peek() { if(size == 0) { throw new ArrayIndexOutOfBoundsException("栈已经空啦"); } return array[size - 1]; } public int p...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL数据库在高并发下的优化方案
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- SpringBoot2全家桶,快速入门学习开发网站教程