java - zalando Problem-spring-web 生成不需要的堆栈跟踪

标签 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 中注册,但这里不会发生。

医生说

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/

相关文章:

java - 使用spring数据的ElasticSearchTemplate时,是否可以指定写一致性级别?

java - 使用 Spring 应用程序配置日志

spring-boot - 可执行 WAR 不调用 SpringBootServletInitializer#configure

java - 是否有办法从 AsyncResttemplate 获取 http.client.requests 指标?

java - 从静态 ThreadLocal 变量更改 Spring Data Repositories 的 Mongo 集合是否线程安全?

java - 类路径和 list 文件

java - CipherInputStream 从不抛出异常

java - 尝试使用 Spring/JPA/Hikari 在我的代码中查找数据库连接泄漏

java - 使用 MOM 的 Java Spring 微服务示例

java - 如何在@Query注释中使用方法参数作为纯文本