Spring не может сериализовать ImmutableListMultiMap - PullRequest
0 голосов
/ 22 мая 2019

В приложении Spring есть контроллер, который возвращает объект с ImmutableListMultimap в качестве свойства. Сам объект сам по себе заключен в ResponseEntity. Когда объект возвращается клиенту, сериализация происходит правильно, за исключением ImmutableListMultimap, который сериализуется как «empty: false».

public ResponseEntity<?> getFoo(@NonNull final String abc) {
   Map<String, Object> resultMap = new HashMap();
   Sample sample = getSample() /* getSample returns an object of type 
   Sample */
   resultMap.put("result", sample);
   return new ResponseEntity(resultMap, HttpStatus.OK);
}

Вот как выглядит класс Sample

public class Sample {
   String a;
   ImmutableListMultimap<String, String> map;
}

Я смотрел на это обсуждение: Включил сериализацию json Multimap в Spring Boot Project и попытался создать bean-компонент ObjectMapper внутри класса Configuration с помощью GuavaModule, а также напрямую создать bean-компонент guavamodule

@Configuration
@EnableAspectJAutoProxy
public class mainConfig {
    @Bean
    ObjectMapper customizeJacksonConfiguration() {
        ObjectMapper om = new ObjectMapper();
        om.registerModule(new GuavaModule());
        return om;
    }
}
@Bean
    public Module guavaModule() {
        return new GuavaModule();
    }

В целях отладки я также изменил ImmutableListMultimap на ArrayListMultimap, но сериализация по-прежнему не выполняется должным образом.

Подход в ответе, который я отметил выше, работает с приложением весенней загрузки, но наше не является приложением весенней загрузки, поэтому может быть, это не работает.

Полагаю, мне придется добавить сериализатор (Джексон, Гуава или другой) для сериализации мультикарты. Может кто-нибудь подсказать, какой использовать в этом случае и куда добавить сериализатор? Пожалуйста, предложите, если есть другие способы достижения этой сериализации.

Я сохранил код минимальным, но попытался сделать его достаточным для варианта использования. Пожалуйста, дайте мне знать, если мне нужно будет добавить дополнительный код, и я предоставлю это.

...