zalando问题弹簧网络生成不需要的堆栈跟踪

时间:2019-05-24 11:09:26

标签: java spring spring-boot jackson-modules

我正在尝试使用zalando problem-spring-web https://github.com/zalando/problem-spring-web

在自己的Spring Boot项目中实现RFC 7807

我已经按照本指南https://github.com/zalando/problem-spring-web/tree/master/problem-spring-web

进行了设置

当引发异常时,会生成Problem实例,但是其序列化JSON格式与预期的不同,最值得注意的是,当不应该包含堆栈跟踪时。

经过一些调试后,看来ProblemModule没有在用于序列化问题的ObjectMapper中注册(从未调用过其setupModule方法)。我的印象是,声明类型为Module的bean足以让Spring拾取它并在ObjectMapper中注册,但是在这里并没有发生。

医生说

  

如果要启用堆栈跟踪,请配置您的   问题模块如下:

ObjectMapper mapper = new ObjectMapper()
     .registerModule(new ProblemModule().withStackTraces());

这似乎意味着您需要实例化自己的ObjectMapper,但是在反序列化问题时如何确定库是否使用了它呢?

1 个答案:

答案 0 :(得分:0)

由于我无法获得ObjectMapper来注册我的Module,所以我认为自己必须这样做,所以我想出了一个可行的解决方案:

@Configuration
public class ProblemConfiguration implements InitializingBean {

    @Autowired
    ObjectMapper objectMapper;

    @Override
    public void afterPropertiesSet() {
        objectMapper.registerModules(
                new ProblemModule(),
                new ConstraintViolationProblemModule()
        );
    }
}

如果有人知道为什么它无法按预期工作,我很高兴听到它:)