我需要在Spring-boot应用程序中使用默认的ObjectMapper作为单例实例。我可以简单地在我的应用程序中@autowire ObjectMapper(在Spring-boot应用程序中默认创建哪个实例)而不创建@Bean(因为我不想改变ObjectMapper的任何功能)
答案 0 :(得分:3)
您不必更改funcuntallty,您只需返回默认ObjectMapper
@Configuration
public class ObjectMapperConfig {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public ObjectMapper objectMapper(){
return new ObjectMapper();
}
}
答案 1 :(得分:0)
如果您知道其他东西正在创建它,是的,您可以自动装配并在bean中使用它
@Lazy
@Autowired
ObjectMapper mapper;
@PostConstruct
public ObjectMapper configureMapper() {
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
mapper.configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, true);
mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
SimpleModule module = new SimpleModule();
module.addDeserializer(LocalDate.class, new LocalDateDeserializer());
module.addSerializer(LocalDate.class, new LocalDateSerializer());
mapper.registerModule(module);
return mapper;
}
答案 2 :(得分:0)
TL; DR
是的,可以。
说明
这样做的原因是Spring使用“自动配置”,并且如果您还没有创建自己的bean,它将为您实例化该bean(如上所述)。 “实例化”逻辑位于JacksonAutoConfiguration.java
(github link)内部。如您所见,这是一个带有@Bean
批注的@ConditionalOnMissingBean
批注方法,魔术发生了。这与Spring会自动扩展的任何其他bean没什么不同。