Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有下一步或回滚的外部API调用_Java_Spring_Spring Boot - Fatal编程技术网

Java 带有下一步或回滚的外部API调用

Java 带有下一步或回滚的外部API调用,java,spring,spring-boot,Java,Spring,Spring Boot,我需要实现以下功能: 该方法通过POST(创建操作)请求调用外部API。如果创建有效,下一步是在S3中创建一个bucket。如果第一步失败,整个方法应该抛出一个异常 我想到的是: @PostMapping public ResponseEntity<?> foo(String name) { String requestEntity = //.... try { ResponseEntity resp = new RestTemplate()

我需要实现以下功能:

该方法通过POST(创建操作)请求调用外部API。如果创建有效,下一步是在S3中创建一个bucket。如果第一步失败,整个方法应该抛出一个异常

我想到的是:

@PostMapping
public ResponseEntity<?> foo(String name) {
   String requestEntity = //....
   try {
   ResponseEntity resp =
            new RestTemplate().exchange("http://localhost:8080/rest/someservice",
                    HttpMethod.POST, requestEntity, String.class);
       if (resp.getStatusCode().is2xxSuccessful()) {
           myBucket.makeBucket(requestEntity); 

           return new ResponseEntity<>(/*Some success message*/);
       } else return new ResponseEntity<>(/*Some error message*/);
   } catch (RestClientException ex) {
        return new ResponseEntity<>(/*Some error message*/);
   }
}
@PostMapping
公共响应属性foo(字符串名称){
字符串requestEntity=/。。。。
试一试{
反应性=
新建RestTemplate().exchange(“http://localhost:8080/rest/someservice",
HttpMethod.POST、requestEntity、String.class);
if(响应getStatusCode().is2xxSuccessful()){
makeBucket(requestEntity);
返回新的响应属性(/*一些成功消息*/);
}否则返回新的响应属性(/*一些错误消息*/);
}捕获(RestClientException例外){
返回新的响应属性(/*一些错误消息*/);
}
}

这是一个有效的解决方案,或者我应该以不同的方式来做,即使用
CompletableFuture

它必须是同步的,因此此解决方案是有效的。CompleteableFuture将使其异步,这不是您想要的。此方法应将结果返回给调用方,因此它是同步的。在这种情况下,您不必使用任何异步方式。当前的方式是有效的。