You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目出现Status 404 Not Found错误,两日未解决寻求技术帮助

排查Spring Boot 404 Not Found错误的解决方案

我帮你仔细梳理了代码,发现几个关键问题导致了404错误,咱们一个个来解决:

1. 组件扫描范围错误(核心原因)

你的RegplustextApplication类手动指定了@ComponentScan("com.training.regplustext.repository"),这会让Spring只扫描repository包下的组件,而Controller、Service这些核心组件所在的controller、service包完全没被加载到Spring容器里。没有注册任何Controller,自然所有请求都会返回404。

解决方案:
直接删除@ComponentScan注解就行,因为@SpringBootApplication默认会扫描主类所在包(com.training.regplustext)及其所有子包,你的controller、service、repository都在这个范围内,不需要额外指定扫描路径:

package com.training.regplustext;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RegplustextApplication {
    public static void main(String[] args) {
        SpringApplication.run(RegplustextApplication.class, args);
    }
}

2. Login接口的路径参数不匹配

你的UserRestController里的loginPage方法用了@PathVariable Long id,但对应的@PostMapping("login-page/")路径里没有{id}占位符,Spring根本匹配不到这个请求方法,这也是引发404的重要原因。另外看业务逻辑,login方法其实不需要id参数——它是通过用户名和密码做验证的。

解决方案:
如果id参数是多余的,直接删掉就行;如果确实需要传递id,可以改成@RequestParam或者调整路径占位符:

方案一(删除多余id参数):

@PostMapping("login-page/")
public ResponseEntity<String> loginPage(@RequestBody UserRegistrationEntity user){
    try{
        UserRegistrationEntity loggedUser = userService.login(user.getUsername(), user.getPassword());
        return ResponseEntity.ok(loggedUser.getId() + " id login has passed successfully!");
    }catch (AccountNotFound ex){
        return ResponseEntity.badRequest().body(ex.getMessage());
    }
}

方案二(保留id参数,用@RequestParam传递):

@PostMapping("login-page/")
public ResponseEntity<String> loginPage(@RequestBody UserRegistrationEntity user, @RequestParam Long id){
    try{
        userService.login(user.getUsername(), user.getPassword());
        return ResponseEntity.ok(id + " id login has passed successfully!");
    }catch (AccountNotFound ex){
        return ResponseEntity.badRequest().body(ex.getMessage());
    }
}

3. 注册接口的返回值小缺陷(非404,但需修复)

注册接口里的返回字符串"{id} id registration has passed successfully!"中的{id}不会自动替换成实际的id值,需要手动拼接或者用字符串格式化:

@PostMapping("registration-page/")
public ResponseEntity<String> regPage(@RequestBody UserRegistrationEntity newUser, @RequestParam Long id) {
    try{
        UserRegistrationEntity savedUser = userService.registration(newUser.getUsername(), newUser.getPassword());
        return ResponseEntity.ok(savedUser.getId() + " id registration has passed successfully!");
    }catch (NullRegistrationException ex){
        return ResponseEntity.badRequest().body(ex.getMessage());
    }
}

最后验证请求路径

确保Postman的请求路径和Controller配置完全一致:

  • 注册接口:POST http://localhost:8081/welcome-page/registration-page/?id=xxx(如果保留id参数)
  • 登录接口:POST http://localhost:8081/welcome-page/login-page/,请求体携带username和password字段

按照上面的步骤修改后,应该就能解决404问题了。

内容的提问来源于stack exchange,提问作者user16624394

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:29:06