gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:42:23 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com