我的DAO中有一个查找方法
java findSomePojo
,它返回结果SomePojo。这个查找调用了亚马逊数据库API,而javasoftware.amazon.awssdk.services.dynamodb.model.GetItemResponse
具有调用输出。因此,在我的服务层createSomePojo方法中,我尝试使用hasElement()检查(不确定是否正确使用-我正在尝试和调试)。
基本上: 我想检查是否已经有元素,如果保存是非法的,我就不会调用DAO的保存。所以我需要抛出异常。
假设在DB中已经有SomePojo的记录,我尝试调用服务的create_SomePjo。但是我看到日志中过滤器不起作用,并且在反应堆调用createModel_SomePojo时出现NPE,使我相信即使在检查过滤器之后,它仍然会抛出NPE。
///service SomePjoService it has create_SomePojo, find_SomePojo etc
Mono<Void> create_SomePojo(reqPojo){
// Before calling DAO 's save I call serivice find (which basically calls DAOs find (Shown befow after this methid)
Mono<Boolean> monoPresent = find_SomePojo(accountId, contentIdExtn)
.filter(i -> i.getId() != null)
.hasElement();
System.out.println("monoPresent="+monoPresent.toString());
if(monoPresent.toString().equals("MonoHasElement")){
//*************it comes here i see that***********//
System.out.println("hrereee monoPresent="+monoPresent);
// Mono<Error> monoCheck=
return monoPresent.handle((next, sink) -> sink.error(new SomeException(ITEM_ALREADY_EXISTS))).then();
} else {
return SomePojoRepo.save(reqPojo).then();
}
}
Mono<SomePojo> find_SomePojo(id){
return SomePojoRepo.find(id);
}
==============================================================
///DAO : SomePojoRepo.java : it has save,find,delete
Mono<SomePojo> find( String id) {
Mono<SomePojo> fallback = Mono.empty();
Mono<GetItemResponse> monoFilteredResponse = monoFuture
.filter(getItemResponse -> getItemResponse.item().size() > 0&& getItemResponse!=null);
Mono<SomePojo> result = monoFilteredResponse
.map(getItemResponse -> createModel_SomePojo(getItemResponse.item()));
Mono<SomePojo> deferedResult = Mono.defer(() -> result.switchIfEmpty(fallback));
return deferedResult;
}
我看到Mono上有hasElement()方法,但不确定如何正确使用它。 如果我直接在服务中调用DAO save而不进行所有这些findner检查,可能会出现异常,因为主键约束将处理并抛出异常,然后我可以重新抛出并在服务中捕获,但是如果我想在服务中检查并抛出带有错误代码的异常呢? 思路是不将响应错误对象传递到DAO层。
Translated text:我看到Mono类上有hasElement()方法,但是不确定如何正确使用它。如果我在服务中直接调用DAO save方法而没有进行findner检查,可能会出现异常,因为主键约束会处理并抛出异常,然后我可以重新抛出并在服务中捕获,但是如果我想在服务中检查并抛出带有错误代码的异常呢?我的思路是不将响应错误对象传递到DAO层。