5

RESTtemplateを介してputリクエストを行うために、次の形式を使用しようとしています。

 @Autowired
 RestTemplate template;

 @RequestMapping(value = "/change", method = RequestMethod.PUT)
 public ModelAndView change(Data data){


     List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
     acceptableMediaTypes.add(MediaType.APPLICATION_XML);

     HttpHeaders headers = new HttpHeaders();
     headers.setAccept(acceptableMediaTypes);

     HttpEntity<Data> entity = new HttpEntity<Data>(data, headers);
     String url="http://www...com";



     try {
        template.put(url, entity);

      } catch (Exception e) {
        System.out.println(e);
      }

  return new ModelAndView("redirect:/home");
 }

データベースを確認したところ、変化がないことに気づきました。リクエストもログファイルに書き込まれません。デバッグ中、エラーは発生しません。おそらく、putメソッドを正しく使用していません。putメソッドをどのように使用するか、またはRestTemplateを使用してputリクエストを実行するために他に何を試みる必要があるかを誰かに提案できますか?

また、私はputの代わりにexchangeメソッドを使用しようとします:

    try {
        ResponseEntity<Data> result = template.exchange(Url, HttpMethod.PUT, entity, Data.class);
    } catch (Exception e) {
        System.out.println(e);
    }

しかし、この場合、私は次の例外を取ります:

org.springframework.web.client.RestClientException:応答を抽出できませんでした:応答タイプ[website.Data]およびコンテンツタイプ[text / html; charset=utf-8]に適したHttpMessageConverterが見つかりませんでした。

ヘッダーからわかるように、コンテンツタイプをtext/htmlではなくapplication/xmlとして設定します。ヘッダーを見ると、次のものが含まれていることがわかります。

Accept: application/xml

本当に分かりません。他に何を変更する必要がありますか?例外について何かコメントはありますか?

構成:

<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver" 
p:basename="config/views" p:order="1" />

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean class="org.springframework.web.servlet.view.XmlViewResolver">
    <property name="location">
        <value>/WEB-INF/classes/config/xml-views.xml</value>
    </property>
    <property name="order" value="0" />
</bean>
<!--It is used for redirect-->
<bean id="urlBasedViewResolver"
      class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=""/>
    <property name="order" value="2" />
</bean>    

<context:annotation-config />
<!--<context:annotation-config />-->
<context:component-scan base-package="data.controller" />
<context:component-scan base-package="data.service" />


 <bean id="restTemplate"  class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters"> 
        <list>
            <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
        </list>
    </property>
</bean>
4

1 に答える 1

3

あなたのアプリケーションのクライアントは Web ページ (そして HTML) だと思います。この記事では、Web アプリケーションが将来のブラウザーとの互換性に備えるために何をすべきかを説明します (後で PUT、DELETE 操作などをサポートすることにした場合)。

プロジェクトの要約として、web.xml で次の行を宣言しました。

<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/app/*</url-pattern>
</filter-mapping>

この記事では、追加する JavaScript について説明していますが (おそらく Spring 3.0 M1 より前のバージョンの場合)、これは単なる構成であるため、このソリューションの方が優れていることがわかりました。

于 2012-09-27T22:26:21.237 に答える