在 Spring Boot 项目中启用 Multimap 的 json 序列化
Posted
技术标签:
【中文标题】在 Spring Boot 项目中启用 Multimap 的 json 序列化【英文标题】:Enable json serialization of Multimap in Spring Boot Project 【发布时间】:2015-09-02 18:50:04 【问题描述】:我想在 Spring Boot 应用程序中序列化一些 google guava Multimap。
public class SomeDTO
@JsonProperty
Multimap<A, B> prop = HashMultimap.create();
不使用自定义的杰克逊序列化程序,我得到一些结果,例如
"prop ":
"empty": false
这不是我想要得到的。我想到了类似的东西:
"nodes":
"key0": [
"prop0": 2,
"prop1": 4
,
"prop0": 5,
"prop1": 6
],
"key1": [
"prop0": 23,
"prop1": 0
]
添加
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
<version>$jackson.version</version>
</dependency>
到 pom.xml 似乎还不够……但是,我只是从整个春天开始 // 举足轻重的宇宙,所以我想我错过了一些明显的东西。
【问题讨论】:
【参考方案1】:我想出的解决方案是简单地将@Bean
添加到我的主要@Configuration
:
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.datatype.guava.GuavaModule;
// More-obvious imports missing
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer
public static void main(final String[] args)
SpringApplication.run(Application.class, args);
@Override
protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application)
return application.sources(Application.class);
@Bean
ObjectMapper customizeJacksonConfiguration()
ObjectMapper om = new ObjectMapper();
om.registerModule(new GuavaModule());
return om;
Afaik,ObjectMapper
Bean 方法有一个缺点:每次以这种方式创建 ObjectMapper 时,所有以前的配置都会被丢弃。
如果你想添加一个模块到 jackson - 而不是覆盖以前的配置,这种方法更好:
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.datatype.guava.GuavaModule;
// More-obvious imports missing
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer
public static void main(final String[] args)
SpringApplication.run(Application.class, args);
@Override
protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application)
return application.sources(Application.class);
@Bean
public Module guavaModule()
return new GuavaModule();
【讨论】:
Imo,一个新的答案会是有利的;)我实际上忘记了这个问题。但是,是的,你是完全正确的。使用模块不会弄乱它依赖于 objectmapper 的整个 spring 应用程序。 @尼尔以上是关于在 Spring Boot 项目中启用 Multimap 的 json 序列化的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 项目中启用 Multimap 的 json 序列化
Spring Boot Multi Module Gradle Project 类路径问题:Package Not Found, Symbol not Found
如何启用Spring Boot Actuator的所有Endpoints