如何定制Spring Boot隐式使用的Jackson JSON映射器?

我正在使用Spring Boot(1.2.1),其方式与构建RESTful Web服务教程中的方式类似:

@RestController
公共类事件控制器{
@请求映射("/events/all")
事件列表事件(){
返回proxyService.getAllEvents();
}
}

如上所述,SpringMVC隐式地使用Jackson将我的EventList对象序列化为JSON

但我想对JSON格式进行一些简单的自定义,例如:

setSerializationInclusion(JsonInclude.Include.NON_NULL)

问题是,定制隐式JSON映射器的最简单方法是什么?

我在这篇博文中尝试了这种方法,创建了CustomObjectMapper等等,但是第3步,“;在Spring上下文中注册类;,失败:

org.springframework.beans.factory.beancreation异常:
创建名为“jacksonFix”的bean时出错:自动连线依赖项的注入失败;
嵌套异常为org.springframework.beans.factory.BeanCreationException:
无法自动连线方法:public void com.acme.project.JacksonFix.setAnnotationMethodHandlerAdapter(org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter);
嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:
没有[org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]类型的合格bean
为依赖项找到:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项批注:{}

看起来这些说明适用于较旧版本的SpringMVC,而我正在寻找一种简单的方法来让它与最新的SpringBoot一起工作

您可以通过application.properties配置属性包含和许多其他设置:

spring.jackson.default property include=non\u null

文档中有一个表列出了所有可以使用的属性

如果您想要更多的控制,还可以使用Jackson2ObjectMapperBuilderCustomizerbean以编程方式自定义Spring Boot的配置,如文档中所述:

上下文的Jackson2ObjectMapperBuilder可以由一个或多个Jackson2ObjectMapperBuilderCustomizerbean自定义。可以订购此类定制器bean(Boot自己的定制器的订单为0),这样就可以在Boot定制之前和之后应用额外的定制

最后,如果您不需要Boot的任何配置,并且希望完全控制ObjectMapper的配置方式,请声明您自己的Jackson2ObjectMapperBuilderbean:

@Bean
Jackson2ObjectMapperBuilder objectMapperBuilder(){
Jackson2ObjectMapperBuilder=新Jackson2ObjectMapperBuilder();
//配置生成器以满足您的需要
返回生成器;
}

发表评论