在学习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. python自然语言处理学习笔记1

    1.搭建环境 下载anaconda并安装,(其自带python2.7和一些常用包,NumPy,Matplotlib),第一次启动使用spyder 2.下载nltk import nltk nltk.d ...

  2. [flask]jinjia2-模板 url_for的使用

    url_for是什么? url_for()用于生成URL的函数,是Flask内置模板的1个全局函数 url_for()用来获取URL,用法和在Python脚本中相同.url_for的参数是视图的端点( ...

  3. 远程连接mysql要点 虚拟主机定义与分类

    远程连接mysql:通过主机地址与端口号连接 1. 主机地址:找到主机电脑 2. 端口号:找到对应mysql软件 mysql客户端访问服务端需要进行寻找匹配:连接认证-h 主机地址 例如 -hloca ...

  4. 【工具】rinetd 使用教程(linux 下的端口转发工具 )

    日期:2019-07-30 20:00:36 更新: 作者:Bay0net 介绍:使用 rinetd 来转发某端口的流量. 0x01. 安装 官网 RINETD 安装方法很简单,一条语句就 OK 了. ...

  5. ABAP 实现内表自定义的F4功能

    “实现多列内容的F4功能 REPORT Z_TAB_TEST.   TYPES: shlp_descr TYPE shlp_descr .   DATA: BEGIN OF itab OCCURS 0 ...

  6. The window object

    At the core of the BOM is the window object, which represents an instance of the browser. The window ...

  7. Toad oracle

    CJ2PFCQ6P49Q4WHQT2D03GNTVX2AN5DG6FWD04YL4QW625KT391J9YF38VKB92SNBWNW-RU-BOARD-BD cr2384

  8. this引用逸出

    1.定义 public class UnsafeClass { public UnsafeClass(Button button) { button.addActionListener(new Act ...

  9. DJANGO MODEL FORMSETS IN DETAIL AND THEIR ADVANCED USAGE

    Similar to the regular formsets, Django also provides model formset that makes it easy to work with ...

  10. cocos2dx基础篇(7) 触碰事件

    cocos2dx游戏引擎的重点是在于移动设备的跨平台开发,而移动设备上的游戏大部分都是通过屏幕触碰来进行的.比如主菜单的按钮触碰,打飞机中飞机的触碰移动,都需要用到触碰操作.想一想之前讲的菜单按钮CC ...