我有方法:
@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/