我正在使用java8和Spring Cloud在微服务架构中开发系统。我实现了一个post rest控制器,该控制器在json中接收一个对象,然后将其保存在数据库中。问题是;如何获取包含刚刚保存的对象的API网关的URI,以便可以在创建的响应对象上返回它?
就像,当我使用
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(savedProfile.getId()).toUri();
时,我得到http://Boss.mshome.net:8081/profile/1
而不是localhost:8765/nukr-profile-service/profile/1
,后者是API网关路径的端点。
检索此URI的最佳实践是什么?
答案 0 :(得分:0)
因此,我想到了一个解决方案,我只是不知道这是否是最佳实践。 我的发布方法最终像:
@PostMapping("/profile")
public ResponseEntity<Object> createProfile(@Valid @RequestBody Profile profile) {
UriComponents requestComponents = ServletUriComponentsBuilder.fromCurrentRequest().path("").build();
InstanceInfo gatewayService = this.eurekaClient.getNextServerFromEureka(NUKR_API_GATEWAY_SERVICE, false);
Profile savedProfile = this.profileRepository.save(profile);
String uriStr = requestComponents.getScheme() + "://" + gatewayService.getIPAddr() + ":" + gatewayService.getPort() + "/" + this.profileServiceName +
requestComponents.getPath() + "/" + savedProfile.getId();
return ResponseEntity.created(URI.create(uriStr)).build();
}