2015-06-17 2 views
1

Я хочу сериализовать некоторые мулямы goava guava в приложении весенней загрузки.Включить сериализацию json в Multimap в Spring Boot Project

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

без использования настраиваемого Джексона сериалайзера, я получаю какой-то результат, как

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

Который является definitley не то, что я ищу, чтобы получить. Я думал, что-то вроде:

{ 
    "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 кажется не хватает ... Впрочем, я только начинаю с этим весь яровой // ключевой вселенной, так что я Думаю, я пропустил нечто очевидное.

ответ

2

Решение я придумал просто добавляя @Bean к моему основному @Configuration:

@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 подход имеет один недостаток: Everytime ObjectMapper создается таким образом, все предыдущие настройки выкинут далеко.

Если вы хотите добавить модуль Джексону - вместо переопределения предыдущей конфигурации, этот подход лучше:

@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(); 
    } 
} 
Смежные вопросы