Spring 反应式 - 如何在调用方法中处理 mono.error
Spring reactive - how to handle mono.error in calling method
我是 spring 数据反应 Cassandra 的新手。在我的服务中 class 我正在注入 ReactiveCassandraRepository 的实现,如果它通过给定的 id 找到它,我的 pojo 的 returns Mono。
public Mono<MyPojo> getResult(String id) {
return myRepository.findById(id)
.flatMap(result -> result!=null ? getDecision(result) :
Mono.error(new Exception("result not found for id: "+id)));
}
private Mono<? extends MyPojo> getDecision(MyPojoDto result) {
if(result.getRecommendation()==0) {
return Mono.just(MyPojo.builder().result("Accept").build());
}
else
{
return Mono.just(MyPojo.builder().result("Reject").build());
}
}
当存储库找到给定 ID 的记录时,上面的代码工作正常。但是,如果找不到记录,那么我不确定发生了什么。我没有收到任何 returns 异常的日志。
我的 spring 控制器调用了上面的 getResult 方法。但是我不确定如何在我的控制器中处理这个问题,以便我可以向我的消费者发送相关响应。
下面是我的控制器代码。
@RequestMapping(value = “/check/order/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Mono<ResponseEntity<MyPojo>> getResult(
@PathVariable(“id") id id) {
return myService.getResult(id)
.flatMap(result -> result!=null ?
getCustomResponse(id, result,HttpStatus.OK) :
getCustomResponse(id,result, HttpStatus.INTERNAL_SERVER_ERROR));
}
我们如何处理调用方法中的 Mono.error()。
此致,
维诺斯
当找不到任何记录时,您的存储库 returns 似乎是空的 Mono
。
您可以更改 getResult
方法:
return myRepository.findById(id)
.flatMap(result -> getDecision(result))
.switchIfEmpty(Mono.error(new Exception("result not found for id: " + id)));
或者如果您不想创建任何异常的实例,您可以更改控制器:
return myService.getResult(id)
.flatMap(result -> getCustomResponse(id, result, HttpStatus.OK))
.switchIfEmpty(getCustomResponse(id, result, HttpStatus.NOT_FOUND));
我是 spring 数据反应 Cassandra 的新手。在我的服务中 class 我正在注入 ReactiveCassandraRepository 的实现,如果它通过给定的 id 找到它,我的 pojo 的 returns Mono。
public Mono<MyPojo> getResult(String id) {
return myRepository.findById(id)
.flatMap(result -> result!=null ? getDecision(result) :
Mono.error(new Exception("result not found for id: "+id)));
}
private Mono<? extends MyPojo> getDecision(MyPojoDto result) {
if(result.getRecommendation()==0) {
return Mono.just(MyPojo.builder().result("Accept").build());
}
else
{
return Mono.just(MyPojo.builder().result("Reject").build());
}
}
当存储库找到给定 ID 的记录时,上面的代码工作正常。但是,如果找不到记录,那么我不确定发生了什么。我没有收到任何 returns 异常的日志。
我的 spring 控制器调用了上面的 getResult 方法。但是我不确定如何在我的控制器中处理这个问题,以便我可以向我的消费者发送相关响应。
下面是我的控制器代码。
@RequestMapping(value = “/check/order/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Mono<ResponseEntity<MyPojo>> getResult(
@PathVariable(“id") id id) {
return myService.getResult(id)
.flatMap(result -> result!=null ?
getCustomResponse(id, result,HttpStatus.OK) :
getCustomResponse(id,result, HttpStatus.INTERNAL_SERVER_ERROR));
}
我们如何处理调用方法中的 Mono.error()。
此致,
维诺斯
当找不到任何记录时,您的存储库 returns 似乎是空的 Mono
。
您可以更改 getResult
方法:
return myRepository.findById(id)
.flatMap(result -> getDecision(result))
.switchIfEmpty(Mono.error(new Exception("result not found for id: " + id)));
或者如果您不想创建任何异常的实例,您可以更改控制器:
return myService.getResult(id)
.flatMap(result -> getCustomResponse(id, result, HttpStatus.OK))
.switchIfEmpty(getCustomResponse(id, result, HttpStatus.NOT_FOUND));