提问人:Thomas 提问时间:11/11/2023 最后编辑:Brian Tompsett - 汤莱恩Thomas 更新时间:11/12/2023 访问量:31
将响应实体网关 API(适配器端口输出)发送到具有干净体系结构的控制器输入 API
Send Response Entity Gateway API ( Adapter port out) to Controller Input API with Clean Architecture
问:
我正在尝试开发一个基于Clean Architecture的JAVA项目,
我有一个带有请求更新的 API 输入,他调用应用程序服务。
此应用程序服务调用适配器输出(外部网关),因为我需要调用外部 API 来获取一些信息,然后才能完成操作。
让我向您展示一些代码,以便更好地理解:
控制器 API:
@PostMapping(path = "/update/info")
void updateInfo(@RequestBody Info request) {
Info info = new Info(request.getXXX());
updateInfoUseCase.updateInfo(info);
}
在应用程序包中,我有一个用于实现此用例的接口,并且我在 适配器输出(位于外部API GATEWAY的位置),我有这样的东西:
外部网关 API(适配器 OUT)
@Override
public void updateInfo(String info) {
//Here i need to call several times external API with RestTemplate
}
}
我的问题是,如果外部 API 响应失败或无法更新信息,我该如何将响应发送到用户客户端的 API 输入?
我真的希望能找到一些帮助,我希望我的例子足够清楚
答:
0赞
Ahmed Mera
11/11/2023
#1
您可以使用以下解决方案:
控制器类中的方法:
@PostMapping(path = "/update/info")
ResponseEntity<Object> updateInfo(@RequestBody Info request) {
Info info = new Info(request.getXXX());
try {
Object res = updateInfoUseCase.updateInfo(info);
return ResponseEntity.ok().body(res);
}catch (RestClientException e){
return ResponseEntity.status(HttpStatus.NOT_MODIFIED).body(e);
}
}
调用外部 API 的方法
@Override
public Objcet updateInfo(String info) {
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForObject(URL, request, Object.class);
}
如果需要,您可以使用@RestControllerAdvice
来集中处理错误并管理响应,以防像这种情况一样发生 KO。
评论