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
相关产品推荐
相关产品推荐

