问题描述:SpringBoot启动正常,访问RestController报404
代码案例:
package controller;
import domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
@GetMapping("/getOne")
public String getOne(){
System.out.println("你好");
return "欢迎使用SpringBoot3";
}
}
Springboot启动顺利:
访问失败:
根据案例IDEA或浏览器访问http://localhost:8080/getOne ,出现404错误
![访问失败](https://img-blog.csdnimg.cn/602ca7449cf14e27bc42e9624fd06b8a.png
注意:文件的目录结构!!!
问题分析:默认情况下,SpringBoot只会扫描启动类当前包和以下的包
问题解决方法1:
在这个例子中,
主类:SpringBOotDemoApplication在包java.com.springbootdemo;
controller类放在包java.com中;
因为SpringBoot只会扫描启动类当前包和以下的包 ,所以上面这处情况是找不到controller的,所以出现404错误。
正确的做法是:
SpringBOotDemoApplication在包java.com.springbootdemo;
controller类放在com.springbootdemo.controller,这样相当于controller的在的包属于com.springbootdemo底下。这样默认情况下,SpringBoot就会扫描UserController类了。
问题解决方法2:添加@SpringBootApplication(scanBasePackages=“controller”)
在主类的SpringBOotDemoApplication类中,添加注释,指定controller的位置,就可以指定加载,成功解决问题。
如下代码:
package com.springbootdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//@SpringBootApplication
@SpringBootApplication(scanBasePackages="controller")
public class SpringBOotDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBOotDemoApplication.class, args);
}
}