Причина
Проблема, которая вызвала проблему в моем случае, заключалась в том, что добавление настраиваемого HttpMessageConverter типа, который уже существует в предоставленном списке HttpMessageConverters, не приведет к добавлению новогоHttpMessageConverter и не обновляет существующий HttpMessageConverter того же типа.
Решение
Проблема была решена путем удаления существующего объекта HttpMessageConverter из списка, если он имеет общий типнового пользовательского объекта HttpMessageConverter, который предназначен для добавления.Затем добавляем новый пользовательский HttpMessageConverter.
Реализация решения
Utils.java
public class Utils {
public static void injectConverter(HttpMessageConverter converterToInject, List<HttpMessageConverter<?>> convertersList) {
convertersList.removeIf(new Predicate<HttpMessageConverter<?>>() {
@Override
public boolean test(HttpMessageConverter<?> httpMessageConverter) {
return converterToInject.getClass() == httpMessageConverter.getClass();
}
});
convertersList.add(converterToInject);
}
}
SpringWebConfig.java
@Configuration
public class SpringWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new BodyPrinterInterceptor());
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final List<HttpMessageConverter> injectedConverters = new ArrayList<>();
final SimpleModule module = new SimpleModule("module", new Version(1, 0, 0, null, null, null))
.addSerializer(LocalDate.class, new LocalDateSerializer())
.addDeserializer(LocalDate.class, new LocalDateDeserializer())
.addSerializer(Type2_Numbers.class, new Type2_Numbers_Serializer())
.addDeserializer(Type2_Numbers.class, new Type2_Numbers_Deserializer());
final ObjectMapper objectMapper = new ObjectMapper()
.enable(SerializationFeature.INDENT_OUTPUT)
.registerModule(module);
final MappingJackson2HttpMessageConverter converter1 = new MappingJackson2HttpMessageConverter();
converter1.setObjectMapper(objectMapper);
injectedConverters.add(converter1);
final XmlMapper xmlMapper = new XmlMapper();
xmlMapper.registerModule(module);
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
final Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
final MappingJackson2XmlHttpMessageConverter converter2 = new MappingJackson2XmlHttpMessageConverter(builder.build());
converter2.setObjectMapper(xmlMapper);
injectedConverters.add(converter2);
for (HttpMessageConverter injectedConverter : injectedConverters) {
Utils.injectConverter(injectedConverter, converters);
}
}
}