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

如何在Angular+Spring Boot项目中将测试分数存入数据库?

登录用户测试分数存入数据库的实现方案

问题背景

我正在开发基于Angular和Spring Boot的应用,需要在用户登录并完成测试后,将该用户的测试分数存入数据库。


Spring 后端实现

后端提供PUT接口,根据用户名查询用户并更新其测试分数:

@PutMapping("/users/{login}/points")
public ResponseEntity<User> przeslijWynik(
    @PathVariable String login,
    @RequestParam("points") int points) {
    // 根据登录用户名查询用户
    User user = userRepository.findByLogin(login);
    // 空值判断,避免空指针异常
    if (user == null) {
        return ResponseEntity.notFound().build();
    }
    // 更新用户分数并保存到数据库
    user.setPoints(points);
    userRepository.save(user);
    // 返回更新后的用户信息
    return ResponseEntity.ok(user);
}

关键注意点

  • 必须添加用户空值判断,防止因查询不到用户导致的空指针错误
  • 当前接口通过@RequestParam接收分数,意味着前端需要将分数作为URL查询参数传递

Angular 前端实现

前端通过服务调用后端接口,提交当前登录用户的测试分数:

组件中的提交逻辑

sendScore() { 
    // 先设置测试分数,再调用服务提交
    this.wynik.points = this.punkty;
    this.wynikService.przekazWynik(this.wynik, this.user).subscribe((data) => { 
        console.log("更新后的用户数据:", data);
    });
}

服务中的接口调用方法

由于后端使用@RequestParam接收分数,前端需要将分数作为查询参数传递,而非请求体:

przekazWynik(wynik: Wynik, user: User): Observable<Object> {
    const params = new HttpParams().set('points', wynik.points.toString());
    return this.http.put(`${this.url}/${user.login}`, {}, { params });
}

可选调整:后端改用请求体接收分数

如果希望前端通过请求体传递分数,可修改后端接口为:

@PutMapping("/users/{login}/points")
public ResponseEntity<User> przeslijWynik(
    @PathVariable String login,
    @RequestBody Integer points) {
    User user = userRepository.findByLogin(login);
    if (user == null) {
        return ResponseEntity.notFound().build();
    }
    user.setPoints(points);
    userRepository.save(user);
    return ResponseEntity.ok(user);
}

此时前端无需修改przekazWynik方法,保持原请求体传递即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:52:53