springboot多个模块共同引用自定义ObjectMapper 🚃

  • 统一配置
  • 示例


自定义 Jackson 的 ObjectMapper更改时区为东八区, 优点是在多个模块中都可以使用同一种方式来进行配置,方便维护和修改

统一配置

假设有一个 Spring Boot 项目,包含多个模块,每个模块都有自己的 Java Bean 需要进行序列化和反序列化。如果每个模块都单独配置 Jackson 的 ObjectMapper,那么当需要修改时区或其他配置时,就需要修改每个模块的配置文件。这样做会导致代码冗余、配置不一致等问题。

而如果将 Jackson 的 ObjectMapper 配置放在一个公共的模块中,所有需要使用的模块都引用这个公共模块的配置,那么当需要修改配置时,只需要修改这个公共模块的配置,就可以同时影响到所有使用该配置的模块。这样就可以提高代码复用性和维护性,避免出现配置不一致的情况。

示例

可以将 Jackson 的 ObjectMapper 配置放在一个公共的模块中,让其他模块来引用它。以下是一些步骤:

  1. 在公共模块中创建一个类来配置 ObjectMapper,并将其注入 Spring 容器中。例如,创建一个名为 JacksonObjectMapperConfig 的类,并使用 @Configuration 注解将其标记为配置类:
@Configuration
public class JacksonObjectMapperConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 配置 ObjectMapper
        return objectMapper;
    }

}
  1. 在其他模块中,使用 @Import 注解来引入公共模块中的配置类。例如,假设其他模块的配置类为 MyAppConfig,则可以在其上方添加 @Import 注解,引入 JacksonObjectMapperConfig 类:
@Configuration
@Import(JacksonObjectMapperConfig.class)
public class MyAppConfig {

    // 其他配置代码

}
  1. 在其他模块的代码中,可以使用 @Autowired 注解来注入配置好的 ObjectMapper。例如,假设需要在一个 Service 类中使用 ObjectMapper,可以添加 @Autowired 注解来注入:
@Service
public class MyService {

    @Autowired
    private ObjectMapper objectMapper;

    // 其他代码

}

通过将 ObjectMapper 的配置放在一个公共的模块中,所有需要使用的模块都可以引用该配置,从而实现统一的序列化和反序列化方式,方便维护和修改。