AJAXを介してPOSTリクエストを作成し、クラスオブジェクト全体をリクエストにバインドし、そのリクエストを@requestParam
アノテーションで受け取りたい。 @requestBody
アノテーションでできますが、知りたいのですが、@requestParam
アノテーションでできますか?
Ajaxコード:
var restDTO{
id: 3,
name: "hello"
}
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
contentType: 'application/json',
mimeType: 'application/json',
data: JSON.stringify({RestDTO : restDTO}),
success: function(data)
{
}
RestDTOがあります
Class RestDTO
{
int id;
String name;
//getter and setter
}
コントローラー内
public String content(@RequestParam RestDTO restDTO){...}
このコードを実行するにはどうすればよいですか?
Ajaxからデータを送信する際に何を変更する必要がありますか?
@requestParam
注釈付きのRestDtoオブジェクトを受信するには、サーバーで変更する必要がありますか?
@RequestParam
が示すように、oneメソッドのパラメーターをone Webリクエストのパラメーターにバインドする必要はありません。オブジェクトへのマッピングはできません。 @RequestParam
を使用するには、ajaxリクエストを変更する必要があります。
var restDTO{
id: 3,
name: "hello"
}
$.ajax({
url: url,
type: 'POST',
data: restDTO,
success: function(data){
....
}
});
JQueryはリクエストをapplication/x-www-form-urlencoded
として送信し、データをパラメーターに自動的に処理します。コントローラーのメソッドは次のようになります。
@RequestMapping("/url")
public String content(@RequestParam Long id, @RequestParam String name){...}
パラメータをオブジェクトに自動的にマッピングするには、@ModelAttribute
アノテーションを使用できます。
@RequestMapping("/url")
public String content(@ModelAttribute RestDTO restDTO){...}
この場合、javascriptマップの名前はRestDTO
のプロパティの名前と一致する必要があります。
通常、@ModelAttribute
と@RequestBody
は同じ目的で作成されます。リクエストからメソッドへのデータのバインド(プリミティブ型のオブジェクトかどうか)。
Html-formsやプレーンなオブジェクトを扱う場合、@ModelAttribute
の方が便利だと思います。 modelAttribute
やpath
などのSpring機能を使用する準備ができています。
さらに、データを手動で制御する必要がある場合は、@RequestBody
がより柔軟になります。また、複雑なオブジェクトを操作する場合に便利です。
個人的に私は@RequestBody
とjsonを好むでしょう。
データを従来のリクエストパラメータとして送信する場合は、@RequestParam
を省略するだけでオブジェクトにバインドできます。
public String content(RestDTO restDTO){...}
json
を送信する場合は、@RequestBody
を使用する必要があります。
なぜ @RequestParam
を主張している場合でも、マップに対して複数の値をバインドできることに注意してください。
public String content(@RequestParam Map<String, String> restDTO){...}
@RequestParam
ドキュメントから
メソッドパラメータがMapまたはMultiValueMapで、パラメータ名が指定されていない場合、マップパラメータにはすべてのリクエストパラメータの名前と値が入力されます。
Spring Webには、次の注釈があります。
RequestParam-パラメータの取得に使用(/ path?name =)
PathVariable-パスパラメーターに使用(/ path/{name})
RequestBody-post/put/patchなどに使用されます
RequestHeader-ヘッダー用
したがって、post paramsにRequestParamを使用することはできません。jsonであるかどうかは関係ありません