springboot多个模块共同引用自定义ObjectMapper 🚃
- 统一配置
- 示例
自定义 Jackson 的 ObjectMapper更改时区为东八区, 优点是在多个模块中都可以使用同一种方式来进行配置,方便维护和修改
统一配置
假设有一个 Spring Boot 项目,包含多个模块,每个模块都有自己的 Java Bean 需要进行序列化和反序列化。如果每个模块都单独配置 Jackson 的 ObjectMapper,那么当需要修改时区或其他配置时,就需要修改每个模块的配置文件。这样做会导致代码冗余、配置不一致等问题。
而如果将 Jackson 的 ObjectMapper 配置放在一个公共的模块中,所有需要使用的模块都引用这个公共模块的配置,那么当需要修改配置时,只需要修改这个公共模块的配置,就可以同时影响到所有使用该配置的模块。这样就可以提高代码复用性和维护性,避免出现配置不一致的情况。
示例
可以将 Jackson 的 ObjectMapper 配置放在一个公共的模块中,让其他模块来引用它。以下是一些步骤:
- 在公共模块中创建一个类来配置 ObjectMapper,并将其注入 Spring 容器中。例如,创建一个名为
JacksonObjectMapperConfig
的类,并使用@Configuration
注解将其标记为配置类:
@Configuration
public class JacksonObjectMapperConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// 配置 ObjectMapper
return objectMapper;
}
}
- 在其他模块中,使用
@Import
注解来引入公共模块中的配置类。例如,假设其他模块的配置类为MyAppConfig
,则可以在其上方添加@Import
注解,引入JacksonObjectMapperConfig
类:
@Configuration
@Import(JacksonObjectMapperConfig.class)
public class MyAppConfig {
// 其他配置代码
}
- 在其他模块的代码中,可以使用
@Autowired
注解来注入配置好的 ObjectMapper。例如,假设需要在一个 Service 类中使用 ObjectMapper,可以添加@Autowired
注解来注入:
@Service
public class MyService {
@Autowired
private ObjectMapper objectMapper;
// 其他代码
}
通过将 ObjectMapper 的配置放在一个公共的模块中,所有需要使用的模块都可以引用该配置,从而实现统一的序列化和反序列化方式,方便维护和修改。