Как получить URI API Gateway после публикации - PullRequest
0 голосов
/ 12 июня 2019

Я занимаюсь разработкой системы в архитектуре микросервисов с использованием java8 и Spring Cloud. Я реализовал контроллер пост-отдыха, который получает объект в json, а затем сохраняет его в базе данных. Проблема в; как получить URI, содержащий шлюз API только что сохраненного объекта, чтобы я мог вернуть его в созданном теле ответа?

Например, когда я использую 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 голосов
/ 12 июня 2019

Итак, я пришел к решению, я просто не знаю, является ли это наилучшей практикой или нет. Мой метод сообщения в конечном итоге выглядит так:

@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();
    }
...