Я сделал ExceptionMapper
для перехвата и регистрации всех исключений, например:
@Provider
public class CatchAllExceptionsMapper implements ExceptionMapper<Throwable> {
private static final Logger LOG = LoggerFactory.getLogger(CatchAllExceptionsMapper.class);
@Override
public Response toResponse(Throwable exception) {
LOG.error("Exception not catched!", exception);
return Response.serverError().build();
}
}
Он перехватывает Exception
с моего кода, но если я отправляю запрос со значением JSON, которое выбрасываетIllegalStateException
при создании моего объекта, это ExceptionMapper
игнорируется, и я получаю ответ 400 Bad Request
.
Забавно, что этот Ответ не является традиционным Ответом Tomcat в формате HTML, это просто обычный текст.В нем просто сказано:
Невозможно создать экземпляр `com.example.vo.AutoValue_Customer $ Builder`, проблема: имя пустое или пустое.в [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor $ UnCloseableInputStream);строка: 14, столбец: 1]
Я думал, что это может быть что-то короткое замыкание Джерси, но мой @PreMatching
ContainerRequestFilter
выполняется заранее, поэтому я действительно понятия не имею, почему 400
Ответ не является традиционным HTML от Tomcat.
Почему это происходит?Что я могу сделать, чтобы поймать это и вернуть мой собственный ответ?