在Spring Boot Project中启用Multimap的json序列化 [英] Enable json serialization of Multimap in Spring Boot Project

查看:529
本文介绍了在Spring Boot Project中启用Multimap的json序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Spring Boot应用程序中序列化一些Google guava Multimap.

I want to serialize some google guava Multimap in a spring boot application.

public class SomeDTO {
    @JsonProperty
    Multimap<A, B> prop = HashMultimap.create();
}

不使用自定义的杰克逊序列化器,我会得到类似

Without using a customized jackson serializer, I get some result like

{
   "prop ":
   {
       "empty": false
   }
}

这是definitley,不是我想要得到的.我想到了类似的东西:

Which is definitley not what I seek to get. I thought of something like:

{
  "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似乎还不够...但是,我只是从整个春季开始//关键的宇宙,所以我想我会想念一些明显的东西.

to the pom.xml seems not sufficient... However, I'm just starting with this whole spring // pivotal universe, so I guess I miss something obvious.

推荐答案

我想出的解决方案是在主@Configuration中简单地添加@Bean:

The solution i came up with is simply adding a @Bean to my main @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时,所有先前的配置都会被丢弃.

Afaik, the ObjectMapper Bean approach has one drawback: Everytime an ObjectMapper is created this way, all previous configuration gets thrown away.

如果您想向杰克逊添加模块-而不是覆盖以前的配置,这种方法更好:

If you want to add a module to jackson - instead of overriding previous configuration, this approach is better:

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();
    }
}

这篇关于在Spring Boot Project中启用Multimap的json序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆