如何在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
相关产品推荐
相关产品推荐

