在 Java Spring 中使用异步时如何处理错误?

问题描述 投票:0回答:1

Java Spring Boot 新手。我有一个 API 调用将实体保存到 SQL 数据库。实体的创建花费的时间太长,因此实际保存该方法的方法被设为异步。现在 API 立即返回 201,而不是等待对象被保存。

旧代码:

    @PostMapping("/createStudent")
    public ResponseEntity<Student> createStudent(@RequestBody Student student) {
        Student createdStudent = this.studentService.createStudent(student);
        return  createdStudent;
    }

新代码:

    @PostMapping("/createStudent")
    public ResponseEntity<Student> createStudent(@RequestBody Student student) {
        this.studentService.createAsyncStudent(student);
        return new ResponseEntity<>(new Student(),HttpStatus.OK);
    }

使用新代码,createAsyncStudent 方法内部某处发生错误。但 API 立即返回 200。有没有办法告诉我的 React 前端 API 无法使用新代码创建学生,或者只能使用旧代码?

createAsyncStudent方法本身就有错误处理代码,但是如何将这个错误信息返回给前端呢?

java spring asynchronous
1个回答
0
投票

一般来说,您需要一种机制(

polling
)来检测实体的创建进度。最简单的方法是为
202
方法返回带有创建 ID 的
createStudent
状态,FE 将通过端点定期检查该 ID 的实体状态(例如:
GET /student-creation/{id}
)。后端将更新其进度,包括创建的学生 ID 以及任何错误消息到
student-creation
表中。
另一种可能的解决方案是使用套接字来维护连接,后端稍后发送错误的响应,但它在实现上并不像轮询那么简单。

© www.soinside.com 2019 - 2024. All rights reserved.