当前位置: 首页 > 知识库问答 >
问题:

Dropwizard拦截错误的json并返回自定义错误消息

尉迟高澹
2023-03-14

我想拦截一个错误的JSON输入,并使用Dropwizard应用程序返回自定义错误消息。我遵循了这里提到的定义自定义异常映射器的方法:http://gary-rowe.com/agilestack/2012/10/23/how-to-implement-a-runtimeexceptionmapper-for-dropwizard/。但它不适合我。同样的问题也被问到这里https://groups.google.com/forum/#!主题/dropwizard-用户/r76Ny-pCveA,但没有得到回答。

任何帮助将不胜感激。

下面是我的代码,我在dropwizard中将它注册为environment.jersey()。register(runtimeexceptionmapper . class);

@Provider
public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {

    private static Logger logger = LoggerFactory.getLogger(RuntimeExceptionMapper.class);

    @Override
    public Response toResponse(RuntimeException runtime) {
        logger.error("API invocation failed. Runtime : {}, Message : {}", runtime, runtime.getMessage());
        return Response.serverError().type(MediaType.APPLICATION_JSON).entity(new Error()).build();
    }

}

共有1个答案

向和歌
2023-03-14

Jackson抛出的异常没有扩展< code>RuntimeException,但扩展了< code>Exception。不过这并不重要。(见问题2)

DropwizardResourceConfig,注册它自己的JsonProcessingExceptionMapper。因此,您应该已经看到类似的结果

{
    "message":"Unrecognized field \"field\" (class d.s.h.c.MyClass),..."
}

现在,如果要重写它,则应创建更具体的异常映射器。使用异常映射器时,将选择最具体的映射器。Json 处理异常Json 映射异常Json 处理异常进行子类化,因此您需要为其中每个创建一个异常映射器。然后注册它们。我不确定如何取消注册Dropwizard Json处理异常映射器,否则我们可以为Json处理异常创建一个映射器,这将节省我们创建两者的麻烦。

因此,如果需要,您可以通过以下方式删除Dropwizard映射器

Set<Object> providers = environment.jersey().getResourceConfig().getSingletons();
Iterator it = providers.iterator();
while (it.hasNext()) {
    Object val = it.next();
    if (val instanceof JsonProcessingExceptionMapper) {
        it.remove();
        break;
    }
}

然后您可以自由使用自己的映射器JsonProcessingException

 类似资料:
  • 安全测试人员声称,我应该清理返回的JSON(即转义这些符号),因为这可能会给旧的浏览器带来一些问题(即在浏览器中执行此JS代码)。 但是生成错误消息的是SpringBoot框架, 我在这里没有太多的控制权。 当然,我可以将参数定义为String,并自己进行验证,但我怀疑这是否是正确的方法。我的参数定义为Integer,我希望它保持这种方式。 做这件事最简单的方法是什么?

  • 故事是,我创建了一个自定义 API 路由 ,用于提取任何帖子类型的帖子。在本地,它可以完美地工作(MAMP),但在多个生产服务器(不同的环境)上,它会返回500错误。 适用于本地的API路由: http://wordpress.local/wp-json/wp-post-modal/v1/any-post-type?slug=modal-页 生产中的API路由示例(表明API路由确实存在): <

  • 本文向大家介绍PHP使Laravel为JSON REST API返回自定义错误的问题,包括了PHP使Laravel为JSON REST API返回自定义错误的问题的使用技巧和注意事项,需要的朋友参考一下 我正在开发某种RESTful API.发生一些错误时,我会抛出一个App :: abort($code,$message)错误. 问题是:我希望他用键“代码”和“消息”抛出一个json形成的数组,

  • 因此,我在Django中处理model.py,得到2个pylint错误。我不明白为什么?这是pylint的问题还是我在代码中做错了什么。 > 第一个是在第19行,在条目主题=模型中。外键(主题) 第二个在第24行self.text[:50] 如果我删除入口类代码工作

  • 我有一个配置,我想从指定位置返回自定义错误。然而,我收到的却是标准的nginx错误页面。不过,我可以从未命名的位置获取自定义错误。 为了重现这个问题,我创建了这个简单的基于docker的设置: Dockerfile: 违约形态: 50x错误在这里并不有趣,我已经从nginx docker映像中调整了配置。 使用404以外的东西重定向到指定位置并没有什么区别。 404.html: 然后启动docke