如何全局配置杰克逊与弹簧?

Nab*_*ham 3 java spring jackson

要序列化反序列化对象,我使用Jackson作为流程

@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate openingDate 
Run Code Online (Sandbox Code Playgroud)

如何将其设置为全局默认值,所以不必将其添加到每个属性中?

使用XML配置。

Jan*_*cký 6

使用 Spring Boot,您可以通过注册新的Module.

@Configuration
public class AppConfig {

    @Bean
    public Module module() {
        SimpleModule module = new SimpleModule("Module", new Version(1, 0, 0, null, null, null));
        module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
        module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());

        return module;
    }
}
Run Code Online (Sandbox Code Playgroud)

如此处文档所述

Jackson 1.7 添加了通过模块接口注册序列化器和反序列化的功能。这是添加自定义序列化程序的推荐方法——所有序列化程序都被视为“通用”,因为除非找到更具体的绑定,否则它们用于子类型。

这里

任何类型的 beancom.fasterxml.jackson.databind.Module都会自动注册到自动配置中 Jackson2ObjectMapperBuilder,并应用于ObjectMapper 它创建的任何实例。当您向应用程序添加新功能时,这提供了一种贡献自定义模块的全局机制。


Man*_*anu 5

如果使用的是基于Java的配置,则可以创建扩展WebMvcConfigurerAdapter的配置类并执行以下操作:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    final ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    converter.setObjectMapper(objectMapper);
    converters.add(converter);
    super.configureMessageConverters(converters);
}
Run Code Online (Sandbox Code Playgroud)

在这里,您可以根据需要配置ObjectMapper并将其设置为转换器。