2017-02-04 1 views
0

Я звоню в микросервис в моем контроллере отдыха. Он отлично работает, когда когда-либо есть успешный ответ от Micro-сервиса, но если есть какой-то ответ об ошибке, я не могу передать ответ об ошибке обратно пользователю. Ниже приведен пример кода.Вызов микросервиса с использованием веб-сервера WebClient Sprint 5

@GetMapping("/{id}/users/all") 
public Mono<Employee> findAllProfiles(@PathVariable("id") UUID organisationId, 
              @RequestHeader(name = "Authorization", required = false) String oauthJwt) { 
    return webClient.get().uri(prepareUrl("{id}/users/all"), organisationId) 
      .header("Authorization", oauthJwt).accept(MediaType.APPLICATION_JSON) 
      .exchange().then(response -> response.bodyToMono(Employee.class)); 
} 

Теперь, если есть ответ JSON с кодом ошибки, то веб-клиент не передает ответ об ошибке на контроллер, благодаря которому информация не распространяется на конечного пользователя апи.

+0

могли бы вы рассказать немного больше? Каков ответ HTTP, отправленный удаленной службой? Как работает ваше приложение, я полагаю, что 'findAllProfiles' не отвечает надлежащим' Employee'? Какие журналы вы видите, если добавить 'log (" org.yourpackage.something ")' operator после 'then (...)'? –

ответ

0

Вы должны иметь возможность цеплять методы из API Mono. Найдите «onError», чтобы увидеть ряд параметров, которые позволят вам определить поведение при возникновении ошибки.

Например, если вы хотите, чтобы вернуться «пустой» Сотрудник, вы можете сделать следующее:

.exchange() 
.then(response -> response.bodyToMono(Employee.class)) 
.onErrorReturn(new Employee());