发布后如何检索API网关URI

时间:2019-06-11 23:54:10

标签: uri spring-cloud netflix-eureka api-gateway

我正在使用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的最佳实践是什么?

1 个答案:

答案 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();
    }