You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dropwizard 1.2.3配置JsonProcessingExceptionMapper日志记录

配置Dropwizard 1.2.3的JsonProcessingExceptionMapper

在Dropwizard 1.2.3版本中,默认的JsonProcessingExceptionMapper的showDetail属性默认是false,而且没法直接通过config.yml来修改这个属性——因为这个版本的框架没有提供对应的配置项映射。要让这个mapper输出详细的异常信息,你需要手动注册自定义配置的实例,具体步骤如下:

步骤1:修改config.yml关闭默认异常mapper自动注册

首先,把你的registerDefaultExceptionMappers设为false,避免框架自动注册默认的JsonProcessingExceptionMapper实例,防止和你自定义的实例冲突:

server:
  type: simple
  connector:
    type: http
    port: 0
requestLog:
  appenders: []
registerDefaultExceptionMappers: false

步骤2:在Application类中手动注册配置好的mapper

在你的Dropwizard Application子类的run方法里,实例化JsonProcessingExceptionMapper并设置showDetail属性,然后注册到Jersey环境中:

@Override
public void run(YourAppConfiguration config, Environment environment) {
    // 配置并注册JsonProcessingExceptionMapper
    JsonProcessingExceptionMapper jsonExceptionMapper = new JsonProcessingExceptionMapper();
    jsonExceptionMapper.setShowDetail(true); // 开启详细错误信息输出
    
    environment.jersey().register(jsonExceptionMapper);
    
    // 如果你还需要保留其他默认的异常mapper,可以手动注册它们
    // 比如:environment.jersey().register(new DefaultExceptionMapper());
    // 其他业务逻辑注册...
}

补充说明

如果你不想关闭所有默认异常mapper的自动注册,也可以先让框架自动注册,然后通过Jersey的ResourceConfig找到已注册的JsonProcessingExceptionMapper实例并修改它的showDetail属性,但这种方式依赖框架内部的注册顺序,稳定性不如手动注册,代码示例大概是这样:

@Override
public void run(YourAppConfiguration config, Environment environment) {
    // 找到已注册的默认JsonProcessingExceptionMapper并修改属性
    environment.jersey().getResourceConfig().getSingletons().stream()
        .filter(mapper -> mapper instanceof JsonProcessingExceptionMapper)
        .findFirst()
        .ifPresent(mapper -> ((JsonProcessingExceptionMapper) mapper).setShowDetail(true));
    
    // 其他业务逻辑...
}

内容的提问来源于stack exchange,提问作者thomas77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:44:05