我有两个模块,一个从休息模板调用另一个。(管理员调用 notifServer)notifServer 有一个用 注释的方法@Async
。我想在该方法中抛出异常,但是管理员太快得到响应,并且无法在管理员处捕获异常方法。
我是 spring 和 @Async 流程的新手。我尝试将响应正文从 NotifServer 映射到 C CompletableFuture.class
。但我仍然没有收到错误响应。
此代码来自管理员
ResponseEntity response = fcmRestTemplate.exchange(nsUrl + "/fcm/admin/" + bulkFcmId, HttpMethod.POST,
HttpEntityUtils.getHttpEntity(moduleCode), CompletableFuture.class);
if (response.getStatusCode() != HttpStatus.CREATED && response.getStatusCode() != HttpStatus.ACCEPTED) {
String errorMessage = ErrorResourceUtil.getErrorMessage((HashMap) response.getBody(),"Unable to send fcm");
setStatusToFailedByBulkFcmId(bulkFcmId);
throw new ClientException(errorMessage);
}
现在这是来自NotifServer
JobExecution jobExecution = jobLauncher
.run(importJob, new JobParametersBuilder()
.addString("fullPathFileName", TMP_DIR)
.addString("batch_fcm_id", String.valueOf(id))
.addLong("time",System.currentTimeMillis())
.toJobParameters());
if(jobExecution.getStepExecutions().stream().map(StepExecution::getStatus).findFirst().get().equals(BatchStatus.ABANDONED)){
throw new ClientException("INVALID CSV");
这是用@Async 注释的。
那么有没有办法让我在管理员的响应正文中捕获客户端异常?
编辑 这是来自 notifServer 的 API
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = "/admin/{bulkFcmId}")
public void pushFCMByAdmin(@PathVariable Long bulkFcmId) {
fcmService.sendFcmByAdmin(bulkFcmId, AuthUtil.getCurrentUser());
}
然后 sendFcmByAdmin 有 @Async 注释。