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

我正在使用Spring Boot" title="Spring Boot">Spring Boot(1.2.1),其方式与他们的Build RESTful Web Service教程中的方式类似:

@RestController

public class EventController {

@RequestMapping("/events/all")

EventList events() {

return proxyService.getAllEvents();

}

}

因此,在上面,Spring MVC隐式使用Jackson将我的EventList对象序列化为JSON。

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

setSerializationInclusion(JsonInclude.Include.NON_NULL)

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

我在此博客文章中尝试了该方法,创建了CustomObjectMapper,依此类推,但是步骤3“在Spring上下文中注册类”失败了:

org.springframework.beans.factory.BeanCreationException: 

Error creating bean with name 'jacksonFix': Injection of autowired dependencies failed;

nested exception is org.springframework.beans.factory.BeanCreationException:

Could not autowire method: public void com.acme.project.JacksonFix.setAnnotationMethodHandlerAdapter(org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter);

nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:

No qualifying bean of type [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]

found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

看起来这些说明适用于旧版本的Spring MVC,而我正在寻找一种简单的方法来使此功能与最新的Spring Boot一起使用。

回答:

如果你使用的是Spring Boot 1.3,则可以通过application.properties以下命令配置序列化包含:

spring.jackson.serialization-inclusion=non_null

在Jackson 2.7中进行了更改之后,Spring Boot 1.4使用名为的属性spring.jackson.default-property-inclusion代替:

spring.jackson.default-property-inclusion=non_null

请参阅Spring Boot文档中的“ 自定义Jackson ObjectMapper ”部分。

如果你使用的是Spring Boot的早期版本,则配置Spring Boot中包含的序列化的最简单方法是声明自己的,适当配置的Jackson2ObjectMapperBuilderbean。例如:

@Bean

public Jackson2ObjectMapperBuilder objectMapperBuilder() {

Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

builder.serializationInclusion(JsonInclude.Include.NON_NULL);

return builder;

}

以上是 如何自定义Spring Boot隐式使用的Jackson JSON映射器? 的全部内容, 来源链接: utcz.com/qa/428598.html

回到顶部