Spring Boot API注册接口返回404 Not Found问题排查(无数据库)
本地及Azure部署的Web应用注册接口/api/users/register返回404 Not Found
我正在开发部署于Azure的Web应用,前端调用注册接口/api/users/register时返回404 Not Found错误,本地环境也能复现。已确认后端配置了注册请求处理逻辑,前端请求参数及路径正确,需要解决该问题以实现本地及Azure环境登录功能正常运行。
已完成排查:
- Azure应用服务运行正常
- 端点定义正确
- CORS允许所有来源
- 前端请求URL正确
- 前端为纯HTML/CSS/JS,静态资源存放于
src/main/resources/static目录,页面元素配置无误
后端相关代码
UserController代码
@RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @PostMapping("/register") public ResponseEntity<?> registerUser(@RequestBody User newUser) { User registeredUser = userService.registerUser(newUser.getPhoneNumber(), newUser.getUsername(), newUser.getPassword()); if (registeredUser != null) { return ResponseEntity.ok("Registration successful"); } else { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Registration failed"); } } @PostMapping("/login") public ResponseEntity<?> loginUser(@RequestBody User loginUser, HttpSession session) { User user = userService.loginUser(loginUser.getUsername(), loginUser.getPassword()); if (user != null) { session.setAttribute("userId", user.getUserId()); Map<String, String> response = new HashMap<>(); response.put("message", "Login successful"); return ResponseEntity.ok(response); } else { Map<String, String> response = new HashMap<>(); response.put("message", "Invalid credentials"); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(response); } } @PostMapping("/logout") public ResponseEntity<?> logoutUser(HttpSession session) { session.invalidate(); Map<String, String> response = new HashMap<>(); response.put("message", "Logged out successfully"); return ResponseEntity.ok(response); } @GetMapping("/test") public ResponseEntity<String> testEndpoint() { return ResponseEntity.ok("Test endpoint is working!"); } }
UserService代码
public class UserService { private UserData userData = new UserData(); public User registerUser(String phoneNumber, String username, String password) { return userData.registerUser(phoneNumber, username, password); } public User getUserById(String userId) { return userData.getUserById(userId); } public User loginUser(String username, String password) { return userData.loginUser(username, password); } }
User实体类代码
package Backend; import java.util.ArrayList; import java.util.List; public class User { private String userId; private String phoneNumber; private String username; private String password; private List<User> friends; public User(String userId, String phoneNumber, String username, String password, List<User> friends) { this.userId = userId; this.phoneNumber = phoneNumber; this.username = username; this.password = password; this.friends = friends; } // Getters and setters }
前端注册请求代码
document.getElementById('registerForm').addEventListener('submit', function(event) { event.preventDefault(); let username = document.getElementById('username').value; let password = document.getElementById('password').value; let phoneNumber = document.getElementById('phonenumber').value; var userData = { username: username, password: password, phoneNumber: phoneNumber }; fetch('http://localhost:8080/api/users/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(userData) }) .then(response => { if (response.ok) { alert('Registration successful!'); document.getElementById('registerForm').reset(); window.location.href = 'login.html'; } else { throw new Error('Registration failed.'); } }) .catch(error => { console.error('Registration error:', error); alert('Registration failed. Please try again later.'); }); });
问题排查与解决方案
1. 检查Spring Boot组件扫描配置
确认UserController所在包是否被Spring Boot自动扫描:
- 若主应用类与
UserController不在同级或子包下,需在主类添加@ComponentScan(basePackages = {"你的Controller所在包路径"}),手动指定扫描范围。
2. 修复User实体序列化问题
Jackson反序列化JSON请求体依赖无参构造函数,当前User类仅含带参构造函数,需添加:
public User() { // 无参构造函数 }
同时确保所有字段的getter和setter都正确实现,保证Jackson能正常读写字段值。
3. 验证接口映射有效性
启动应用后访问http://localhost:8080/api/users/test:
- 若测试接口也返回404,说明Controller未被加载,重点排查组件扫描和Spring Boot配置;
- 若测试接口正常,检查是否存在其他Controller与
/api/users/register路径冲突。
4. 查看应用日志
- 本地启动时,搜索控制台日志中的
Mapping关键字,确认是否有POST /api/users/register的映射记录; - Azure环境下,查看应用服务日志流,排查Controller加载失败或路由映射异常的报错信息。
内容的提问来源于stack exchange,提问作者Jens Dorrestijn
相关产品推荐
相关产品推荐

