在学习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. 微信小程序中的不同场景,不同的判断,请求的时机

    本来5月1之前就想写一下一篇关于小程序不同场景下发送ajax请求的问题,但是放假的前一天,出了个大bug,就是因为我修改不同的场景下执行不同的逻辑造成的 1.首先,在小程序里,微信做了很多的缓存,我们 ...

  2. [转]Tomcat中8005/8009/8080/8443端口的作用

    8005:关闭tomcat进程所用.当执行shutdown.sh关闭tomcat时就是连接8005端口执行“SHUTDOWN”命令--由此,我们直接telnet8005端口执行“SHUTDOWN”(要 ...

  3. Linux 下 *.tar.gz 文件解压缩命令及错误处理

    1.压缩命令: 命令格式: tar -zcvf 压缩文件名 .tar.gz 被压缩文件名 可先切换到当前目录下,压缩文件名和被压缩文件名都可加入路径. 2.解压缩命令: 命令格式: tar -zxvf ...

  4. Centos 7 安装tomcat并部署jar实录

    本文目的 纯属记录,以备后查. 1.安装JAVA JDK 安装jdk略. 配置JDK,打开/etc/profile文件,在最后添加如下代码: JAVA_HOME=/usr/java/jdk1..0_2 ...

  5. 详解git pull和git fetch的区别

    前言 在我们使用git的时候用的更新代码是git fetch,git pull这两条指令.但是有没有小伙伴去思考过这两者的区别呢?有经验的人总是说最好用git fetch+git merge,不建议用 ...

  6. Delphi实现类的持久化保存(DFM格式)

    var inStream,outStream:TMemoryStream; begin inStream:=TMemoryStream.Create; outStream:=TMemoryStream ...

  7. cocos2dx[3.2](1) 浅析cocos2dx3.2引擎目录

    3.x的引擎目录与2.x的引擎目录的差别是非常大的.3.x主要是将引擎的各个文件按照用途进行了分类,使得引擎目录结构更加清晰了. 从目录中我们主要了解一下以下几个文件: 文件名 说明 build 官方 ...

  8. 【FFMPEG】网络流媒体协议

    目录(?)[-] RTP RTCP SRTP SRTCP RTSP RTSP 和RTP的关系 SDP RTMPRTMPS mms HLS RTP           参考文档 RFC3550/RFC3 ...

  9. 洛谷 P3386 二分图匹配 题解

    题面 这道题虽然是练习匈牙利算法的,但可以用网络流来切掉它: 我们可以建立一个超级源和一个超级汇,超级源连接左部分点,超级汇连接右部分点: 然后在该图上跑最大流就可以了: PS:我设的超级源是2001 ...

  10. 解决 Intellij IDEA Cannot Resolve Symbol ‘BASE Decoder’ 问题

    最近接盘了用springboot框架搭建的后台,第一次接触java的我就遇上了bug: 因为jdk更新而导致Cannot Resolve Symbol ‘BASE Decoder’ 问题 看了很多网上 ...