Html – RestTemplate receive html content type and not json

html, json, spring

i'm trying to access to a rest webservice that returns a json string in this way:

HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity<String> entity = new HttpEntity<String>(request.getRequest(RequestFormat.JSON),headers);MyBean response = template.postForObject(endpoint.toURI(), entity,MyBean.class);

I receive that message:

Could not extract response: no suitable HttpMessageConverter found for response type mypackage.MyBean and content type [text/html;charset=utf-8]

That's because the webservice i'm contacting doesn't return response with application/json content type but with text/html.

So i'm trying to add media Type to RestTemplate in this way:

@Bean    public RestTemplate restTemplate() {        RestTemplate template = new RestTemplate(clientHttpRequestFactory());        List<HttpMessageConverter<?>> converters = template.getMessageConverters();        for(HttpMessageConverter<?> converter : converters){            if(converter instanceof MappingJackson2HttpMessageConverter){                try{                converter.getSupportedMediaTypes().add(MediaType.TEXT_HTML);                }catch(Exception e){                    e.printStackTrace();                }            }        }        return template;    }

but it gives me that exeption:

java.lang.UnsupportedOperationException    at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)    at mypackage.Application.restTemplate(Application.java:60)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:606)    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:586)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)    at javax.servlet.GenericServlet.init(GenericServlet.java:158)    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284)    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197)    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5210)    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5493)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)    at java.util.concurrent.FutureTask.run(FutureTask.java:262)    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)    at java.lang.Thread.run(Thread.java:744)

How can i tell convert that content-type to json?

Thanks!

Best Solution

As you can see, getSupportedMediaTypes() returns an immutable list. You should use setSupportedMediaTypes() instead.