我正在尝试执行RESTful Web服务,但是,当我发送请求时,HttpClientErrorException会以“415 Unsupported Media Type”作为消息发生。
这是服务电话的代码:
MultiValueMap<String, String> request = new LinkedMultiValueMap<String, String>();
request.add(val1, "xxxxx");
request.add(val2, "************");
request.add(val3, "xxx");
request.add("type", "AUTHENTICATE");
String response = restTemplate.postForObject(url, request, String.class);
System.out.println(response.toString());
restTemplate从applicationContext.xml连接,FormHttpMessageConverter作为其messageConverter。
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg name="requestFactory" ref="httpClientFactory"/>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<constructor-arg ref="httpClient"/>
</bean>
<bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">
<property name="authenticationPreemptive" value="true"/>
<property name="connectionManagerClass"
value="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"/>
</bean>
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg ref="httpClientParams"/>
</bean>
这是发生的异常:
Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:76)
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:486)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:443)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:279)
at ph.com.smart.drawbridge.commons.diameter.DiameterClient.post(DiameterClient.java:21)
有什么想法吗?
答案 0 :(得分:3)
当您的客户端发送服务器不知道如何处理的媒体类型请求时,会发生此问题。例如,处理url
的服务器方法可以处理application/json
类型的请求,但您发送了text/xml
。服务器无法处理此类请求。要解决此问题,请找出服务器所需的content-type
(媒体类型),在restTemplate
对象中设置标题content-type:application/json
(将application/json
替换为任何内容服务器预期)。此外,请确保以正确的格式发送请求(如果我们正在讨论json
您需要具有可以将对象序列化为jackson
对象的json
依赖项。 / p>
答案 1 :(得分:0)
你现在可能不需要这个,但是我将在今后遇到这类问题的人分享这个。
正如@Avi指出的那样,当您的服务器期望与您在请求中发送的媒体类型不同时,会发生此问题。
在我的情况下,我发送了带有MediaType.APPLICATION_JSON
的表单数据,而我的服务器需要Mutipart表单数据。在我的请求中添加以下标题解决了我的问题:
HttpHeaders headers = getBasicAuthHttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);