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

标签 java spring spring-mvc jackson spring-boot

我正在使用 Spring Boot (1.2.1),其方式与他们的 Building a 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 映射器的最简单方法是什么?

我尝试了 this blog post 中的方法,创建 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 一起工作。

最佳答案

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

spring.jackson.default-property-inclusion=non_null

the documentation 中有一张 table 列出了所有可以使用的属性。

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

The context’s Jackson2ObjectMapperBuilder can be customized by one or more Jackson2ObjectMapperBuilderCustomizer beans. Such customizer beans can be ordered (Boot’s own customizer has an order of 0), letting additional customization be applied both before and after Boot’s customization.

最后,如果您不想要 Boot 的任何配置并希望完全控制 ObjectMapper配置好了,声明自己的Jackson2ObjectMapperBuilder bean :

@Bean
Jackson2ObjectMapperBuilder objectMapperBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
    // Configure the builder to suit your needs
    return builder;
}

关于java - 如何自定义 Spring Boot 隐式使用的 Jackson JSON 映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324352/

相关文章:

java - 字符串更改为 null

regex - 在 JSTL 中解析请求 URL

spring - spring mvc 中的 Handler 适配器是什么?

java - 在应用自定义之前检查字段是否已经违反了某些规则

java - 如果我从多个线程使用 JSch,我应该如何使用它

Java 客户端通过 TCP 连接与 C++ 服务器通信

java - 无法提交 JPA 事务 : Transaction marked as rollbackOnly

java - 用户定义泛型类的 Spring TypeDescriptor

java - 在 spring petclinic 中设置 hibernate.max_fetch_depth

java - Spring MVC : correct package for POJO used in services