我正在尝试使用 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
中注册,但这里不会发生。
医生说
In case you want to enable stack traces, please configure your ProblemModule as follows:
ObjectMapper mapper = new ObjectMapper()
.registerModule(new ProblemModule().withStackTraces());
这似乎意味着您需要实例化自己的ObjectMapper
,但是如何确保在反序列化问题时库使用它?
最佳答案
由于我无法让ObjectMapper
来注册我的模块
,我想我必须自己做,所以我想出了这个似乎有效的解决方案:
@Configuration
public class ProblemConfiguration implements InitializingBean {
@Autowired
ObjectMapper objectMapper;
@Override
public void afterPropertiesSet() {
objectMapper.registerModules(
new ProblemModule(),
new ConstraintViolationProblemModule()
);
}
}
如果有人知道为什么它没有按预期工作,我很高兴听到它:)
关于java - zalando Problem-spring-web 生成不需要的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56291441/