Spring RestTemplate PostforObject:不支持的媒体类型

Spring RestTemplate PostforObject:不支持的媒体类型,spring,http,rest,Spring,Http,Rest,我正在尝试执行RESTful web服务,但是,当我发送请求时,会出现HttpClientErrorException,消息为“415 Unsupported Media Type” 这是服务呼叫的代码: MultiValueMap<String, String> request = new LinkedMultiValueMap<String, String>(); request.add(val1, "xxxxx"); request.add(val2, "*****

我正在尝试执行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());

有什么想法吗?

当您的客户端发送一个服务器不知道如何处理的媒体类型的请求时,就会出现此问题。例如,处理
url
的服务器方法可以处理
application/json
类型的请求,但您发送了
text/xml
。服务器无法处理此类请求。为了解决这个问题,找出服务器需要的
内容类型
(媒体类型),在
restemplate
对象中设置一个头,该头设置
内容类型:application/json
(用服务器需要的任何内容替换
application/json
)。另外,确保请求以正确的格式发送(如果我们谈论的是
json
,那么您需要有
jackson
依赖项,可以将您的对象序列化为
json
对象)。

您现在可能不需要这个,但我将为将来遇到此类问题的任何人分享

正如@Avi所指出的,当您的服务器需要与您在请求中发送的介质类型不同的介质类型时,就会出现此问题

在我的例子中,我使用
MediaType.APPLICATION\u JSON
发送表单数据,而我的服务器需要多部分表单数据。将以下标题添加到我的请求解决了我的问题:

HttpHeaders headers = getBasicAuthHttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
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)
HttpHeaders headers = getBasicAuthHttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);