使用 dropwizard 捕获 json 处理异常?
Catch json processing exception with dropwizard?
我有一个 dropwizard 应用程序,其中注册了一个实现 ExceptionMapper<Throwable>
的全局异常处理程序。如果我从资源中抛出任何运行时异常,映射器就会被命中。
但是,在测试中,我将 JSON 发布到一个缺少 jackson 多态类型类型鉴别器的资源。 Jersey 返回 400,我可以看到在单步执行代码时抛出 JsonProcessingException
,但全局映射器没有被击中。
我试图查看是否有任何其他异常映射器注册并尝试注销它们,方法是检查 environment.jersey().getResourceConfig().getSingletons()
集并且没有其他异常映射器注册。
我也试过为那个异常创建一个特定的处理程序,但没有。即便如此,如果我已经有一个全局处理程序来捕获所有 Throwable,那还是有点奇怪。
有人遇到过吗?
--
编辑:
看起来 dropwizard 异常映射器确实被注册了,我不知何故需要找出生命周期中发生的时间并注销它
是的,您确实需要覆盖 JsonProcessingException
(JsonProcessingExceptionMapper
) 的异常映射器。
looks like the dropwizard exception mapper does get registered and I somehow need to find out when in the lifecycle that happens and unregister it
您可以了解如何在此 上覆盖 ExceptionMapper。
我有一个 dropwizard 应用程序,其中注册了一个实现 ExceptionMapper<Throwable>
的全局异常处理程序。如果我从资源中抛出任何运行时异常,映射器就会被命中。
但是,在测试中,我将 JSON 发布到一个缺少 jackson 多态类型类型鉴别器的资源。 Jersey 返回 400,我可以看到在单步执行代码时抛出 JsonProcessingException
,但全局映射器没有被击中。
我试图查看是否有任何其他异常映射器注册并尝试注销它们,方法是检查 environment.jersey().getResourceConfig().getSingletons()
集并且没有其他异常映射器注册。
我也试过为那个异常创建一个特定的处理程序,但没有。即便如此,如果我已经有一个全局处理程序来捕获所有 Throwable,那还是有点奇怪。
有人遇到过吗?
--
编辑:
看起来 dropwizard 异常映射器确实被注册了,我不知何故需要找出生命周期中发生的时间并注销它
是的,您确实需要覆盖 JsonProcessingException
(JsonProcessingExceptionMapper
) 的异常映射器。
looks like the dropwizard exception mapper does get registered and I somehow need to find out when in the lifecycle that happens and unregister it
您可以了解如何在此