在Springboot应用程序中自动装配ObjectMapper

时间:2018-02-17 18:15:29

标签: spring-boot jackson objectmapper

我需要在Spring-boot应用程序中使用默认的ObjectMapper作为单例实例。我可以简单地在我的应用程序中@autowire ObjectMapper(在Spring-boot应用程序中默认创建哪个实例)而不创建@Bean(因为我不想改变ObjectMapper的任何功能)

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper

3 个答案:

答案 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.javagithub link)内部。如您所见,这是一个带有@Bean批注的@ConditionalOnMissingBean批注方法,魔术发生了。这与Spring会自动扩展的任何其他bean没什么不同。