2016-12-14 5 views
0

У меня есть веб-службы JAX-RS, которые берут вход JSON от клиентов и возвращают выходные данные JSON клиентам. Мне нужно регистрировать как входные, так и выходные сообщения JSON. Я знаю, как это сделать для ввода, как показано в коде ниже. Этот код будет захватывать точный вход JSON, который поступает. Как мне сделать то же самое для выходов?Входные ответы JSON от веб-служб JAX-RS

public class LogRequestFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     InputStream inputStream = requestContext.getEntityStream(); 
     // Read the JSON request input from the input stream. 
    } 
} 
+0

использование log4j сбор всех журналов и вход, выход и ошибка тоже. попробуйте эту ссылку https://www.tutorialspoint.com/spring/logging_with_log4j.htm – PLP

ответ

0

Использование ContainerResponseFilter получить обменен Entity. Добавить фильтр в списке поставщиков сервера JAX-RS

public class LogResponseFilter implements ContainerResponseFilter { 
    public void filter(ContainerRequestContext inContext, ContainerResponseContext outContext) throws IOException{ 

     Object entity = outContext.getEntity(); 
     //log entity.toSgring() 

     //You can use the output stream to write a custom message 
     //OutputStream outputStream = outContext.getEntityStream(); 
    } 
} 

Чтобы просто войти в полезную нагрузку, глядя на эту ссылку https://stackoverflow.com/a/25337892/6371459 я вижу

OutputStream пуст в то время фильтр называется потому что время выполнения JAX-RS не написано. После вашего фильтра среда выполнение будет выбрать правильный MessageBodyWriter, который будет сериализовать объект в OutputStream

Так что нужно добавить WriterInterceptor быть execuded после MessageBodyWriters писать желаемый тип контента.

В предыдущей ссылке у вас есть полный код.

+0

Привет, что это за класс JAXRSUtils? Кажется, это не часть Джерси. – user3573403

+0

Моя ошибка. Я опубликовал решение, адаптированное к структуре CXF. Я обновил ответ на использование стандартного JAX-RS 'ContainerResponseContext' – pedrofb

+0

. Ваш ответ не ясен. Что мне делать с потоком вывода? Я хочу получить ответ, который отправляется клиенту. Как получить данные из потока вывода? – user3573403