Springboot: изменить входящий ответ веб-службы - PullRequest
2 голосов
/ 23 октября 2019

В настоящее время я работаю над сервисом Springboot, и он должен иметь возможность изменять тело ответа, полученное от различных вызовов веб-сервиса, сделанных им самим.

Я много гуглил и мог найти информациюо сервлет-фильтрах, пружинных перехватчиках и т. д. Но все они находятся между этой службой и ее вызывающими клиентами.

Но я ищу компонент, который может находиться между этим сервисом и другими сервисами, которые он вызывает. Самым близким, который я смог найти, был SpringHttpRequestInterceptor, но у него, похоже, нет возможности изменять тело ответа.

  1. Клиентские приложения ---> 2. Мой сервис Springboot. ---> 3. Другие веб-сервисы

Мне нужно, чтобы здесь был компонент от 2 до 3.

Может кто-нибудь пролить свет на это? Спасибо.

PS: Также я знаю, что jaxrs ClientRequestFilter помогает, но мне нужно решение для пружинных вызовов службы на основе RestTemplate, а не для jaxrs.

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

В Spring RestTemplate позволяет нам добавлять перехватчики, которые реализуют интерфейс ClientHttpRequestInterceptor.

Метод перехвата (HttpRequest, byte [], ClientHttpRequestExecution) этого интерфейса перехватит данный запрос и вернет ответ, предоставив нам доступ к запросу,

аргумент ClientHttpRequestExecution для выполнения действительноговыполнение и передача запроса в последующую цепочку процессов

public class BodyInterceptor
  implements ClientHttpRequestInterceptor {

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

        ClientHttpResponse response = execution.execute(request, body);
        response.getHeaders().add("Iphone_version", "proX");
        return response;
    }
}
1 голос
/ 23 октября 2019

Spring AOP может помочь в вашем сценарии. Он может действовать как компонент перед вызовом другого контроллера или компонента.

...