【问题标题】:Return Either (Vavr) in rest api在rest api中返回任何一个(Vavr)
【发布时间】:2021-10-09 17:47:24
【问题描述】:

我有方法:

@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));
}

我想返回 List 和 HTTP 状态或 TaskError.TASKS_LIST_NOT_FOUND 和 HTTP 状态,但由于 Either 在 Json 中还有其他内容,例如“正确”等。

解决方案(感谢@chrylis -cautiouslyoptimistic)

@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));
}

【问题讨论】:

    标签: java spring rest either vavr


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2023-03-19
      相关资源
      最近更新 更多