2013-03-07 2 views
0

У нас есть веб-сервис Restaasy.Resteasy PostProcessInterceptor после ResteasyJacksonProvider

Я использую провайдер Jackson для JSON, как исходящий JSON в ответ, так и входящий JSON в запросе.

Возможно ли, чтобы послепроцессорный приемник выполнялся после сериализации JSON-Jackson?

My PostProcessInterceptor должен изменить содержимое JSON для каждого исходящего ответа. Но когда PostProcessInterceptor выполняется, если я печатаю объект response.getEntity().toString();, я вижу метод toString объекта java.lang.Object, а не строку JSON. Это потому, что объект еще не был сериализован Джексоном.

Можно ли сериализовать с помощью Resteasy/Jackson до с использованием PostProcessInterceptor?

Я также попытался использовать аннотацию @Precedence на моем PostProcessInterceptor. Но это не работает, даже используя приоритет «DECODER» (который является последним).

Любая идея? Заранее спасибо.

ответ

0

Вместо этого я бы пошел на перехватчик CDI. Вы можете получить параметры перехваченного метода из InvocationContext и при необходимости изменить их.

+0

Я ищу перехватчик, который обрабатывает все ответы исходящего тела (а не входящий запрос), возможно ли это с помощью CDI Interceptor? Я сейчас читаю документацию, это то, что вы мне предлагаете? http://docs.jboss.org/weld/reference/1.1.5.Final/en-US/html/interceptors.html – thermz

+0

Если вас интересует объект ответа, прежде чем он будет сериализован Resteasy, тогда да. Измените это и последующий JSON. Вы можете просто получить context.proceed() ответ Object и бросить его (yikes!) Или уловить исходящие исключения. Если вам нужно увидеть окончательный результат после того, как все обработчики исключений выполнили свои задания и внесут изменения в фактическую строку JSON, вы можете попробовать MessageBodyWriterInterceptor. Не сделал этого сам, так что это просто осознанное предположение. – garbelini

+0

Правильно, я сказал: «Можно ли запустить PostProcessInterceptor после сериализации JSON-Jackson?» Поэтому меня интересует строка JSON в теле ответа, а не объект. Итак, ваше предложение - MessageBodyWriterInterceptor. Кажется хорошим решением, я дам вам знать! – thermz

Смежные вопросы