В приложении 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, но сериализация по-прежнему не выполняется должным образом.
Подход в ответе, который я отметил выше, работает с приложением весенней загрузки, но наше не является приложением весенней загрузки, поэтому может быть, это не работает.
Полагаю, мне придется добавить сериализатор (Джексон, Гуава или другой) для сериализации мультикарты. Может кто-нибудь подсказать, какой использовать в этом случае и куда добавить сериализатор?
Пожалуйста, предложите, если есть другие способы достижения этой сериализации.
Я сохранил код минимальным, но попытался сделать его достаточным для варианта использования. Пожалуйста, дайте мне знать, если мне нужно будет добавить дополнительный код, и я предоставлю это.