3

ajax クライアントから送信された xml を Java オブジェクトにアンマーシャリングできるようにするすべてのピースを接続するのに問題があります。私は ajax クライアント、Spring3、および JAXB に Jquery を使用しています。主なコンポーネントは次のとおりです。

Ajax クライアント

        function checkForNewActivities(activities) {
            $j.ajax({
                url: "upload/checkForNewActivities",
                type: "POST",
                async: true, 
                dataType: "xml",
                data: ({activities:activities}),
                contentType: "application/xml",

                beforeSend: function() {
                    alert("sending ajax");
                },
                complete: function() {
                    alert("ajax sent");
                },
                success: function(data) {
                    alert("success");
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    alert(textStatus + errorThrown);
                }
            });
        }

春の設定

<bean id="marshallingConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
          <property name="marshaller" ref="jaxbMarshaller" />
          <property name="unmarshaller" ref="jaxbMarshaller" />
          <property name="supportedMediaTypes" value="application/xml"/>
    </bean>

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
           a bunch of java classes
        </list>
    </property>
</bean>

そして、これがターゲットである Spring Controller メソッドです。

  @RequestMapping(value="/checkForNewActivities",headers="application/xml", method=RequestMethod.POST)
  public @ResponseBody String uploadMultipleWorkouts(@RequestBody String activities) {        
      System.out.println(activities);
      return ""; 
  }

RequestMapping の headers="application/xml" では、このメソッドは呼び出されません。ヘッダー パラメータを削除すると、メソッドが呼び出され、アクティビティをコンソールにダンプすると、エスケープされた xml が表示されます。

xml のアンマーシャリングが行われるように、このメソッドをスプリング構成に接続する方法が明らかに欠けています。

4

1 に答える 1

2

println がエスケープされた xml を出力する理由は、変数のデータ型activitiesString. メソッドに渡されるデータを保持するクラスを作成して、JAXB が xml を変換できる構造が存在するようにする必要があります。

たとえば、代わりに

public @ResponseBody String uploadMultipleWorkouts(@RequestBody String activities) {

あなたはしたいでしょう

public @ResponseBody Activities uploadMultipleWorkouts(@RequestBody Activities activities) {

Activities渡す xml データを割り当てることができるように、適切なゲッターとセッターを使用して定義したクラスはどこにありますか。リクエスト データとレスポンス データが異なる必要がある場合は、リクエストとレスポンスのバリアントという 2 つのクラスを定義するだけです。

なぜ使用すると混乱するのかについては、次のheaders="application/xml"ように設定してみてくださいheaders = {"content-type=application/xml"}

于 2012-11-06T19:07:52.540 に答える