我做了一个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
我的代码抛出的 s,但是如果我发送一个带有 JSON 值的请求,该值IllegalStateException
在我的对象创建时抛出一个,这ExceptionMapper
将被忽略并且我得到一个400 Bad Request
响应。
有趣的是这个响应不是传统的 Tomcat HTML 格式的响应,它只是纯文本。它只是说:
无法构造 `com.example.vo.AutoValue_Customer$Builder` 的实例,问题:名字为空或为空。在 [来源:(org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream);行:14,列:1]
我认为这可能会使 Jersey 短路,但我@PreMatching
ContainerRequestFilter
是事先执行的,所以我真的不知道为什么400
Response 不是来自 Tomcat 的传统 HTML。
为什么会这样?我能做些什么来捕捉这个并返回我自己的响应?