4

RESTful Web サービスを実行しようとしていますが、リクエストを送信すると、「415 Unsupported Media Type」というメッセージで HttpClientErrorException が発生します。

これは、サービス コールのコードです。

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 は、その messageConverter として FormHttpMessageConverter を使用して、applicationContext.xml から配線されます。

<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)

何か案は?

4

2 に答える 2

4

この問題は、サーバーが処理方法を認識していないメディア タイプのリクエストをクライアントが送信した場合に発生します。たとえば、 を処理するサーバー メソッドurlはタイプのリクエストを処理できますapplication/jsonが、送信したのはtext/xml. サーバーはそのような要求を処理できません。これを修正するには、サーバーが期待する (メディア タイプ) を見つけ、設定するオブジェクトにcontent-typeヘッダーを設定します(サーバーが期待するものに置き換えます)。また、リクエストが正しい形式で送信されていることを確認してください (オブジェクトをオブジェクトにシリアル化できる依存関係が必要な場合)。restTemplatecontent-type:application/jsonapplication/jsonjsonjacksonjson

于 2013-07-05T09:08:46.777 に答える