在学习spring-boot入门的第一个例子就是spring-boot-web的一个在页面上输出hello-world的例子,在运行这个例子的时候我遇到了下面这个简单的问题,但是第一次解决还是花了我很长的时间,记录一下。

问题描述如下图:

我有三个Controller,一个是将主类当成第一个Controller;第二个Controller在主类所在的子目录下,就是TestController;第三个Controller是捕鱼主类在同一个包下的OutOfRangeController。而主类的配置只有一个@SpringBootApplication。但是在浏览器进行访问的时候却出现了第一第二个Controller可以访问的到,而第三个OutOfRangeController访问不到的问题,如下图所示:

而出现这种情况的原因在于@SpringBootApplication。下图是官方给出的注解使用说明:

这一大段大概就是指明了一个意思@SpringBootApplication=@EnableAutoConfiguration+@ComponentScan+@Configuration

@Configuration:该注解将类可以看成配置文件,通常和@Bean配合使用

@EnableAutoConfiguration:在程序启动时自动加载配置

@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。

我们需要关注的就是@ComponentScan,下面是官方给出的一段对于@ComponentScan的介绍

大概意思是说,如果代码结构按照被建议的那样,将主类放在根目录下,那么只需要配置一个@ComponentScan,无需添加任何参数。而这一句就解释了我们自己编写的第一个和第二个Controller为什么会被加载,而第三个OutOfRangeController无法被加载,因为第三个OutOfRangeController和主类不再同一个目录下,无法被自动加载,所以需要我们去手动加载。于是我在主类上手动添加了一条@ComponentScan,将第三个OutOfRangeController所在的路径进行添加,如下图所示

启动工程发现虽然第三个OutOfRangeController可以访问了,但是TestController无法正常访问

说明自己配置的@ComponentScan覆盖了@SpringBootApplication中的@ComponentScan,但是由于@SpringBootApplication还有另外两个标签,所以在主类中配置的Controller还是好使的,但是在其子包下的配置都不好使了,无法被自动搜索到。

所以在配置@ComponentScan时,推荐以下两种配置,第一种是将根路径作为参数,第二种是多配置几个路径,如下图所示

以上不仅是对Controller配置有效,推广来看应该是对@Component所有子注解都有效。

Q1:spring-boot中Controller路径无法被访问的问题的更多相关文章

  1. spring boot 中的路径映射

    在spring boot中集成thymeleaf后,我们知道thymeleaf的默认的html的路径为classpath:/templates也就是resources/templates,那如何访问这 ...

  2. Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅

    在上一篇Spring中使用JdbcTemplate访问数据库中介绍了一种基本的数据访问方式,结合构建RESTful API和使用Thymeleaf模板引擎渲染Web视图的内容就已经可以完成App服务端 ...

  3. spring mvc 中 controller 路径配置

    下图中,由于红色部分(value="/")的存在,导致 host:port/项目/dimlist 无法被映射到dimList方法,解决办法是将其去掉. package cn.bgo ...

  4. Spring Boot 中 Controller 使用

    1.属性配置 2.Controller使用 2.@PathVariable 与 @RequestParam 的区别 (1)@PathVariable (2)@RequestParam 3.@GetMa ...

  5. 必须知道的Spring Boot中的一些Controller注解

    这篇文章是抄其他人的,原址:https://cloud.tencent.com/developer/article/1082720 本文旨在向你介绍在Spring Boot中controller中最基 ...

  6. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  7. Spring Boot中使用Swagger2构建API文档

    程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...

  8. 初识在Spring Boot中使用JPA

    前面关于Spring Boot的文章已经介绍了很多了,但是一直都没有涉及到数据库的操作问题,数据库操作当然也是我们在开发中无法回避的问题,那么今天我们就来看看Spring Boot给我们提供了哪些疯狂 ...

  9. 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

随机推荐

  1. ListView的MyBaseAdapter的封装

    import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import j ...

  2. MYSQL5.5二进制包的安装

    二进制1. 下载包 wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.5.55-linux2.6-i686.tar.gz2. 解压 tar xx ...

  3. docker(常见调试技巧):docker打包镜像调试技巧

    写Dockerfile可以先不指定CMD.ENTRYPOINT等启动命令,只要拷贝就好了 如下: # Dockerfile for basic-app-client # Build with: # d ...

  4. Django开发—如何重置migration

    情景一:不需要原有的数据库数据 删除数据库所有的表删除项目的migration模块中的所有 文件,除了init.py 文件执行脚本 python3 manage.py makemigrations p ...

  5. Docker 容器操作

    1. 创建并运行 一个容器 docker run -it --rm   centos:latest  bash run  运行容器 -it  以交互方式运行容器 --rm  退出容器后删除容器 cen ...

  6. win10电脑休眠后无法唤醒的解决办法

    电脑的休眠功能,为长时间不用的电脑进行了关闭显示.硬盘停转的深度节能模式,不仅节约能源,还保护设备. 但有些时候也会出现一些问题,如休眠后无法唤醒,无法移动鼠标,敲击键盘都无效,最后只能长按电源键来强 ...

  7. 黑龙江网络安全技能竞赛awd后门分析复现

    0x0环境 0x1分析复现 0x2感想 围绕主办方留下的浅显后门可以打满整场,想拿第一还是要搞定深层后门

  8. mysql——多表——子查询——示例

    子查询: 子查询是将一个查询语句嵌套在另外一个查询语句中,内层查询语句的查询结果,可以作为外来层查询语句提供查询条件. 因此在特定条件下,一个查询语句的条件,需要另外一个查询语句来获取. 前期准备表: ...

  9. Java 注解:@PostConstruct和@PreConstruct

    从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct.这两个注解被用来修饰一个非静态的 ...

  10. 云服务器以及linux操作系统打开防火墙,在墙上开一个小口

    在服务器运行时,需要在某个端口上开一个小口,以供外部访问 执行命令/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT 8080为端口号,需要开的 ...