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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:05:14