java - 在rest api中返回Either (Vavr)

标签 java spring rest either vavr

我有方法:

@GetMapping
public Either<ResponseEntity<TaskError>,ResponseEntity<List<TaskDto>>> readAllOrderedByStatus() {

    var result = taskCrudService.readAllOrderedByStatus();

    if (result.isLeft()) {

        return Either.left(
                new ResponseEntity<>(
                        TaskError.TASKS_LIST_NOT_FOUND,
                        HttpStatus.NOT_FOUND));
    }

    return Either.right(new ResponseEntity<>(result.get(),HttpStatus.OK));
}

我想返回列表和HTTP状态或TaskError.TASKS_LIST_NOT_FOUND和HTTP状态,但由于Either中还有其他东西在Json中,如“正确”等。

解决方案(感谢@chrylis -谨慎乐观)

@GetMapping
public ResponseEntity<?> readAllOrderedByStatus() {

    var result = taskCrudService.readAllOrderedByStatus();

    return taskCrudService
             .readAllOrderedByStatus()
             .fold(
                     error -> new ResponseEntity<>(error,HttpStatus.NOT_FOUND),
                     list -> new ResponseEntity<>(list,HttpStatus.OK));
}

最佳答案

我在 REST API 中使用 Either 来实现这种概念。您需要负责将您的“任一”转换为一致的响应。在大多数情况下,包括您的情况,您需要fold:

return taskCrudService.readAllOrderedByStatus() // -> Either
  .fold(
    __   -> ResponseEntity.notFound(TASKS_LIST_NOT_FOUND).build(),
    list -> ResponseEntity.ok(list)
  );

关于java - 在rest api中返回Either (Vavr),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68654360/

相关文章:

java - 如何使用纯 Java 验证签名的 JAR?

类字段的 java 模板

rest - 外部用户的 SharePoint REST(和 CSOM)失败

rest - 在 ColdFusion10 中禁用/休息 URL

rest - 如何从 Axomic OpenAsset REST API 构建图像 url

java.util.ConcurrentModificationException - 如何使用迭代器进行删除

Java tomcat声音

java - 使用 Spring Web 客户端发送带有查询参数的 HTTP 通知

java - Spring Boot gRPC : How to return error code when business error happens?

mysql - JPA 非实体,选择数据库结果到 List<object[]>