在学习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. kotlin之布尔类型

    var flag1 :Boolean = true val flag2 :Boolean = false if(flag1&&!flag2){ println("flag1& ...

  2. Ubuntu系统下各种报错杂烩(持续更新)

    在Github时报Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hos ...

  3. nodejs之express框架商品管理系统登录功能

    1.该系统主要使用express.body-parser.express-session.ejs.mongodb-connect . npm install express --save npm in ...

  4. JavaScript日常学习6

    JavaScript的运算符.比较符.条件语句.循环语句.跳出循环(break.continue).标签 JavaScript的运算符.比较符.条件语句.循环语句.跳出循环(break.continu ...

  5. 递归选中easyui树

    $(function(){ // var data1 = [ // { // "id": 3, // "text": "3组织", // & ...

  6. zabbix监控httpd进程、添加动作、报警媒介类型

    1.在server_agent端创建脚本 mkdir -p /usr/local/etc/zabbix_scripts vi /usr/local/etc/zabbix_scripts/check_h ...

  7. MySQL orzdba、dodba、top、iostat、vmstat、perf等

    1 mysq自带的mysqladmin命令 mysqladmin -usystem -p*** -h127.0.0.1 -P3306 -r -i 1 extended-status \ |grep & ...

  8. Python基础知识思维导图|自学Python指南

    微信公众号[软件测试大本营]回复"python",获取50本python精华电子书. 测试/开发知识干货,互联网职场,程序员成长崛起,终身学习. 现在最火的编程语言是什么?答案就是 ...

  9. mongodb 数据库操作 -- 》常用命令

    首先需要下载数据库,安装后,找到bin目录,点开bin目录,复制当前路径配置到环境变量中 和bin的同级下,需要建立一个data/db文件夹,该文件夹并不会自动生成,必须手动设置   启动数据库  看 ...

  10. swagger生成文档初步使用

    在大部分情况下,公司都会要求提供详细的接口文档,对于开发来说,文档有时候在赶进度的情况下,也是一件头疼的事.而swagger的自动生成文档功能,就可以帮助我们减少工作量,对于文档的修改也可以在代码中随 ...