Springboot Interservices communication Исключение обработки - PullRequest
1 голос
/ 25 января 2020

У меня есть микросервис A, который вызывает другую службу B. Я пытаюсь обработать сообщение об ошибке, используя @ExceptionHandler.

Я хочу передать сообщение об ошибке, полученное от B, в службу A. Но в ответе на остальной вызов он дает код HttpStatus, но без тела (ноль). Ниже приведен снимок:

Exception snapshot

Ответ от службы B в почтальоне приведен ниже. Я хочу получить такое же сообщение об ошибке в моей службе A.

Postman response

Ниже приведен мой код:

RestServiceCall. java

public List<AccessResponse>  daxObjectAccessibilitycall(AccessDataObject requestEntity) {
        ResponseEntity<AccessResponse[]> responseEntity = restTemplate.postForEntity(getFullPathService(), requestEntity, AccessResponse[].class);
        if (responseEntity == null) {
            return Collections.emptyList();
        }

        AccessResponse[] accessResponse = responseEntity.getBody();
        return Arrays.asList(accessResponse);
    }

Во время обработки ошибок выдается исключение, которое обрабатывается в этом коде:

public boolean myFoo(MyDto){
.
.
.

        try {
            myObjectAccessibilitycall = serviceCall.objectAccessibilitycall(accessDataObj);
        } catch (RestClientException e) {
            logger.error("Error while getting response from Accessibility", e);
            throw new myException("Error: ", e);
        }

        if (!CollectionUtils.isEmpty(myObjectAccessibilitycall )) {
            for (AccessResponse accessResponse : myObjectAccessibilitycall ) {
                accessFlag = accessResponse.isResponseMsg();
            }
        }
        return accessFlag;
    }

Оцените любую помощь по этому вопросу. Ура!

1 Ответ

2 голосов
/ 25 января 2020

Есть два варианта 1. Используйте @ControllerAdvice для обработки исключений. Ниже мы обрабатываем исключения IllegalArgumentException и IllegalStateException. Как и вам нужно обработать HttpClientErrorException

@ControllerAdvice
public class RestResponseEntityExceptionHandler 
  extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value 
      = { IllegalArgumentException.class, IllegalStateException.class })
    protected ResponseEntity<Object> handleConflict(
      RuntimeException ex, WebRequest request) {
        String bodyOfResponse = "This should be application specific";
        return handleExceptionInternal(ex, bodyOfResponse, 
          new HttpHeaders(), HttpStatus.CONFLICT, request);
    }
}

Вариант 2. Вы можете поймать RestClientResponseException

<T> ResponseEntity consumeWebService(String url, Class<T> responseType) {  
    try {
        return restTemplate.getForEntity(url, responseType);
    } catch (RestClientResponseException e) {
        return ResponseEntity
            .status(e.getRawStatusCode())
            .body(e.getResponseBodyAsString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...