Spring Boot CRUD系统点击新增链接出现HTTP 404错误求助
针对你遇到的点击「Add new」出现404的情况,结合你给出的代码和配置,我整理了几个常见的排查方向和解决方案:
1. 检查控制器类的注解是否完整
你贴出的EmployeeController代码只包含了方法,首先要确认类上有没有添加@Controller注解——这是Spring识别控制器并生效请求映射的关键,很多新手容易漏掉这个:
@Controller // 必须添加这个注解 public class EmployeeController { @Autowired private EmployeeService service; // 你的方法代码... }
如果没有这个注解,Spring不会把这个类当作控制器处理,/new的请求映射自然不会生效,导致404。
2. 确认控制器所在包被Spring Boot扫描到
Spring Boot默认只会扫描主启动类所在包及其子包中的组件。假设你的主启动类(比如EmployeeApplication.java)在com.yourcompany.demo包下,那EmployeeController必须放在com.yourcompany.demo或者它的子包(比如com.yourcompany.demo.controller)里。
如果控制器不在这个范围内,你需要在主启动类上添加@ComponentScan指定扫描的包:
@SpringBootApplication @ComponentScan(basePackages = "com.yourcompany.controller") // 替换成你的控制器所在包 public class EmployeeApplication { public static void main(String[] args) { SpringApplication.run(EmployeeApplication.class, args); } }
3. 验证视图文件的位置是否正确
你的控制器方法add返回"new",Thymeleaf默认会去src/main/resources/templates/目录下找new.html文件。请确认这个文件确实存在于该目录下,和index.html同级。
注意:如果是视图文件找不到,通常会抛出500错误而非404,但如果控制器映射没生效的话是404,所以优先检查前面两点。
4. 手动测试请求路径
直接在浏览器地址栏输入http://localhost:7020/new:
- 如果还是404:说明请求根本没到达控制器,回到前两点排查;
- 如果能正常加载页面:那问题出在页面的链接生成上,查看页面源码,确认
<a>标签的href属性是不是正确的/new(可能是Thymeleaf表达式生成出错)。
5. 规范请求映射的写法
建议用@GetMapping("/new")代替@RequestMapping(value = "/new"),更明确指定这是处理GET请求的映射,和页面链接的GET请求对应,代码可读性也更强:
@GetMapping("/new") public String add(Model model) { model.addAttribute("employee", new Employee()); return "new"; }
内容的提问来源于stack exchange,提问作者tutusfun

