ptashcka
May 15th, 2011, 07:58 AM
Hi.
Both twitter and facebook use default RestTemplate object configured with FormHttpMessageConverter. The default encoding for this converter is set to "ISO-8859-1", though UTF-8 should be used with Facebook and Twitter API.
Looks like a bug. I've overridden template constructors as a workaround:
List<HttpMessageConverter<?>> converters = getRestTemplate().getMessageConverters();
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof FormHttpMessageConverter) {
((FormHttpMessageConverter) converter).setCharset(Charset.forName("UTF8"));
}
if(converter instanceof MappingJacksonHttpMessageConverter) {
MappingJacksonHttpMessageConverter jsonConverter = (MappingJacksonHttpMessageConverter) converter;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new FacebookModule());
objectMapper.configure(DeserializationConfig.Featu re.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonConverter.setObjectMapper(objectMapper);
}
}
probably there is a better solution?
Both twitter and facebook use default RestTemplate object configured with FormHttpMessageConverter. The default encoding for this converter is set to "ISO-8859-1", though UTF-8 should be used with Facebook and Twitter API.
Looks like a bug. I've overridden template constructors as a workaround:
List<HttpMessageConverter<?>> converters = getRestTemplate().getMessageConverters();
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof FormHttpMessageConverter) {
((FormHttpMessageConverter) converter).setCharset(Charset.forName("UTF8"));
}
if(converter instanceof MappingJacksonHttpMessageConverter) {
MappingJacksonHttpMessageConverter jsonConverter = (MappingJacksonHttpMessageConverter) converter;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new FacebookModule());
objectMapper.configure(DeserializationConfig.Featu re.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonConverter.setObjectMapper(objectMapper);
}
}
probably there is a better solution?