当前位置: 首页 > 知识库问答 >
问题:

Spring在什么地方/什么时候使用项目配置中定义的Jackson2ObjectMapperBuilderCustomizer bean?

澹台冯浩
2023-03-14

我的主要问题是:Spring在什么地方/什么时候使用(注入)在项目的@Configuration类中定义的Jackson2ObjectMapperBuilderCustomizer bean--你能告诉我代码行吗?这里的说明似乎使我需要做的只是定义bean来控制响应在JSON中的序列化方式,但这并不起作用--也就是说,我不能禁用任何SerializationFeatures。

一些背景:

  • Spring-Boot 2.1.1版本
  • spring-webmvc-5.1.3.发布
  • 杰克逊2.9.7

我已经编写了一个REST api(@RestController)。我无法自定义Jackson在http响应中序列化Java即时类型的方式。我尝试了在我的配置中定义ObjectMapper bean、MappingJackson2HttpMessageConverter bean和Jackson2ObjectMapperBuilderCustomizer bean的各种组合(不是一次全部):

@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
  return builder -> {
     builder.modules(new JavaTimeModule());
     builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
     builder.featuresToDisable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
  }
}

当我调试应用程序时,看起来RequestMappinghandlerAdapter的转换器是由WebMvcConfigurationSupport初始化的,但所有这些转换器都是手动实例化的,而不是注入的。也就是说,所有MappingJackson2HttpMessageConverter都是通过调用“new MappingJackson2HttpMessageConverter()”创建的,而这又只是创建股票Jackson2ObjectMapperBuilders和ObjectMappers:


// in org.springframework:spring-web:5.1.3.RELEASE:

public class MappingJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter {
  // ... more
  public MappingJackson2HttpMessageConverter() {
      this(Jackson2ObjectMapperBuilder.json().build());
  }
}

public class Jackson2ObjectMapperBuilder {
  public static Jackson2ObjectMapperBuilder json() {
    return new Jackson2ObjectMapperBuilder();
  }
}

处理响应的HttpEntityMethodProcessor使用相同的转换器。我找不到Jackson2ObjectMapperBuilderCustomizer在这个生命周期中执行自定义的位置。我知道我一定错过了什么,但一直没能找到。

共有1个答案

储毅
2023-03-14
@Bean
@Primary
public ObjectMapper customMapper(){
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);
    return mapper;
}

将上面的bean定义放在您的配置中。这将使spring使用这个自定义bean而不是默认的。

 类似资料:
  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 问题内容: 问候语,当前正在开发小型Web服务应用程序,其中来自Web服务(使用CXF + Spring)的响应已处理并保存到数据库中。为了使用数据库,我正在使用Hibernate(3.5)。在网络上浏览一些Hibernate + Spring示例,我经常可以看到HibernateTemplate的用法,因此我对此感到有些困惑,想问一下: 您是否在Hibernate3应用程序中使用Hibernat

  • 一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 Nginx worker 的资源使用率(CPU,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。 常用的火焰图有三种: lj-lua-stacks.sxx 用于绘制 Lua 代码的火焰图 sam

  • 本文向大家介绍什么时候用delegate,什么时候用Notification?相关面试题,主要包含被问及什么时候用delegate,什么时候用Notification?时的应答技巧和注意事项,需要的朋友参考一下 答:delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,recieve