Spring Boot RestTemplate ClientHttpRequestInterceptor тело ответа в случае исключения - PullRequest
3 голосов
/ 11 февраля 2020

Я использую ClientHttpRequestInterceptor для сообщения о запросе и ответе RestTemplate. Мне нужно записать ответ в случае исключения, скажем, если шаблон пытается разобрать ответ с неправильным классом.

Вот как включен перехватчик:

@Bean
public RestTemplate restTemplate(ReportingConfiguration reportingConfiguration) {
    return new RestTemplateBuilder()
            .interceptors(new RestTemplateInterceptor())
            .build();
}

Единственный принятый здесь интерфейс - ClientHttpRequestInterceptor. Перехватчик выглядит следующим образом:

@Override
public ClientHttpResponse intercept(HttpRequest req, byte[] body, ClientHttpRequestExecution execution) throws IOException {

    ...

    ClientHttpResponse response = null;
    try {
        response = execution.execute(request, body);
    } catch (Exception e) {
        System.out.println("I need to get the response here");
    }

    ...

Я знаю, что с этим классом невозможно получить ответ, не могли бы вы дать альтернативное решение?

это пример исключения: ( пожалуйста, не объясняйте, как избавиться от этого исключения, я знаю, почему я получаю это, я просто хочу зарегистрировать полезную нагрузку на случай, если это произойдет)

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "items" (class com.exapmle.group.web.beans.Response), not marked as ignorable (3 known properties: "text", "status", "set-cookies"]) at [Source: (ByteArrayInputStream); line: 1, column: 11] (through reference chain: com.exapmle.group.web.beans.Response["items"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:823) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1153) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1589) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1567) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)

1 Ответ

0 голосов
/ 11 февраля 2020

Это должно работать:

ClientHttpResponse response = null;
try {
    response = execution.execute(request, body);
} catch (Exception e) {
    System.out.println("I need to get the response here", e.getMessage());
}
...