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