Я запускаю сервлет Джерси 2.2 внутри Jetty 9.0.4, чтобы обслуживать запросы REST.
В основном все хорошо, и запросы подаются, но я никогда не видел журнал ЛЮБОЙ из классов Джерси. И я не могу найти ни одного документа, указывающего, какие куры мне нужно жертвовать, чтобы это произошло с Джерси 2.2.
Итак, мой первый вопрос: что мне нужно сделать, чтобы заставить Джерси создать какой-то журнал.
Когда запрос выполняется с ошибкой (например, поскольку тело запроса Json не может быть проанализировано), Джерси выкинет ContainerException с сообщением типа "Невозможно десериализовать экземпляр java.util.ArrayList из токена START_OBJECT" и т.д. При этом что было бы действительно прекрасным, чтобы зарегистрировать входящий запрос, чтобы я мог проверить Json. Опять же, я не могу найти ничего в текущей доко, излагающей такого зверя, хотя я уверен, что он есть. И в любом случае, пока я не разрешу вопрос 1 выше, он будет спорным.
Итак, мой второй вопрос заключается в том, как я могу регистрировать тело входящего запроса (без нарушения запроса).
Конфигурация "Джерси сервлета" в web.xml выглядит так:
<servlet >
<servlet-name>Jersey Servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>au.com.xandar.wirelesstiming.recorder.web.rest.JerseyApplication</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
My JerseyApplication:
public final class JerseyApplication extends ResourceConfig {
public JerseyApplication() {
super(
//JacksonFeature.class // Switching on Jackson
// (My) JerseyLoggingFilter.class // Log requests using Jersey ContainerRequestFilter
MyApplicationEventListener.class // Log Requests using Jersey RequestEventListener
);
packages("au.com.xandar.wirelesstiming.recorder");
// Enable LoggingFilter & output entity.
// NB This does NOT generate any log.
registerInstances(new LoggingFilter(Logger.getLogger(JerseyApplication.class.getName()), true));
}
}