Программно вызывать Джерси ResourceMethod - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть необходимость перехватывать вызовы ресурсов Джерси и выполнять код перед / после каждого вызова ResourceMethod. У меня есть ModelProcessor, и я могу перехватывать вызовы:

for(Resource resource: resourceModel.getResources()) {
    for (ResourceMethod resourceMethod : resource.getResourceMethods()) {
        Resource.Builder resourceBuilder = Resource.builder(...);

        resourceBuilder
        .addMethod(resourceMethod)
        .handledBy(new Inflector<ContainerRequestContext, Response>() {
          @Override
          public Response apply(ContainerRequestContext containerRequestContext) {
              ...
          }
        });
    }
}

Однако я не могу понять, как вызвать оригинальный ResourceMethod здесь.

1 Ответ

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

Возможно, вы захотите использовать фильтры или перехватчики на Джерси. Из документации: https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/filters-and-interceptors.html#d0e9368

Фильтры и перехватчики могут использоваться с обеих сторон, как на стороне клиента, так и на стороне сервера. Фильтры могут изменять входящие и исходящие запросы и ответы, включая изменение заголовков, сущности и других параметров запроса / ответа. Перехватчики используются в основном для модификации входных и выходных потоков объектов. Вы можете использовать перехватчики, например, для сжатия и распаковки потоков вывода и ввода.

Перехватчики имеют общий API для сервера и клиентской стороны. Принимая во внимание, что фильтры в первую очередь предназначены для манипулирования параметрами запроса и ответа, такими как заголовки HTTP, URI и / или методы HTTP, перехватчики предназначены для манипулирования сущностями посредством манипулирования потоками ввода / вывода сущностей. Если вам, например, нужно кодировать тело сущности клиентского запроса, вы можете реализовать перехватчик, который сделает всю работу за вас.

Поэтому я думаю, что вы хотите использовать Interceptor, потому что они обернут вызов ресурса и у вас будет доступ в одном и том же методе как до вызова ресурса, так и после вызова ресурса.

Вы также можете go с фильтрами, но вам придется разбить код на RequestFilter и ResponseFilter.

...