Spring MVCのコントローラーにAJAXクエリを作成しようとしています。
私のアクションコードは次のとおりです。
@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestParam(value = "start_date") String start_date, @RequestParam(value = "end_date") String end_date, @RequestParam(value = "text") String text, @RequestParam(value = "userId") String userId){
//some code
}
私のAjaxクエリは次のとおりです。
$.ajax({
type: "POST",
url:url,
contentType: "application/json",
data: {
start_date: scheduler.getEvent(id).start_date,
end_date: scheduler.getEvent(id).end_date,
text: scheduler.getEvent(id).text,
userId: userId
},
success:function(result){
//here some code
}
});
しかし、エラーが発生しました:
必須の文字列パラメーター '' start_dateは存在しません
どうして?私が知っているように、私はそれを(@RequestParam(value = "start_date") String start_date
[〜#〜] udp [〜#〜]
今、データを取得するために404クラスを提供しています
public class EventData {
public String end_date;
public String start_date;
public String text;
public String userId;
//Getters and setters
}
私のjs AJAX呼び出しは:
$.ajax({
type: "POST",
url:url,
contentType: "application/json",
// data: eventData,
processData: false,
data: JSON.stringify({
"start_date": scheduler.getEventStartDate(id),
"end_date": scheduler.getEventEndDate(id),
"text": scheduler.getEventText(id),
"userId": "1"
}),
そしてコントローラーのアクション:
@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestBody EventData eventData){
}
JSONデータは次のとおりです。
end_date: "2013-10-03T20:05:00.000Z"
start_date: "2013-10-03T20:00:00.000Z"
text: "gfsgsdgs"
userId: "1"
サーバー側では、リクエストパラメーターをクエリ文字列として期待しますが、クライアント側ではjsonオブジェクトを送信します。 JSONをバインドするには、すべてのパラメーターを保持する単一のクラスを作成し、@ RequestParamではなく@RequestBodyアノテーションを使用する必要があります。
@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestBody CommandBean commandBean){
//some code
}
こちら より詳細な説明。
私は同じ問題を抱えていました。投稿リクエストで設定パラメータを指定することで解決しました。
var config = {
transformRequest : angular.identity,
headers: { "Content-Type": undefined }
}
$http.post('/getAllData', inputData, *config*).success(function(data,status) {
$scope.loader.loading = false;
})
configは、私が含めたパラメーターであり、機能し始めました。