現在、Spring MVC を使用して学習しています。開発中、 Ajax と jQueryで 4 種類のフォーム処理を使用しました。さて、それぞれの方法の長所と短所は何だろうと思っています。他にもありますか?
2 つの入力しかない非常に単純なフォームがあるとします。
<input id="name" type="text" value"Name">
<input id="active" type="checkbox">
<input type="button" onclick="submitForm()">
クライアント サイトでもサーバー サイトでもデータを検証していないと仮定しましょう。また、返されたデータの処理も省略します。サーバーにデータを送信することに興味があります。では、どのように送信を処理できますか? 私の解決策は次のとおりです。
1. PathVariable に基づくリクエスト
JS 送信リクエストは次のようになります。
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
jQuery.ajax("/Submit/Name/" + name + "/Active/"+ active + "/",
{
type:"POST"
});
}
また、コントローラー:
@RequestMapping(value="/Submit/Name/{name}/Active/{active}/",method=RequestMethod.POST)
publis void submitForm(@PathVariable String name, @PathVariable Boolean active)
{ //something not important here }
私の意見では長所
- コントローラーでデータを受け取る簡単な方法、簡単な注釈で機能します
- 基本的なデータ型 (文字列、ブール値、数値) の型照合
短所
- 要求アドレスは必要なデータとともに増加します
- URL の特殊文字に問題がありますか?
/
これについてはよくわかりませんが、チームメイトがサーバーに送信されるデータで文字として使用されるという問題を抱えていたことを覚えています
2. データ付きリクエスト
名前の付け方はわかりませんが、これはJSファイルのアイデアです:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
var object = {name:name,active:active};
jQuery.ajax("/Submit/",
{
type:"POST",
data: object
});
}
そしてコントローラー:
@RequestMapping(value="/Submit/",method=RequestMethod.POST)
publis void submitForm(@RequestParam(value="name") String name, @RequestParam(value="active") Boolean active)
{ //something not important here }
私の意見では、最初の方法と大差ありませんが、
長所
- 短いリクエストアドレス
短所
- 多くのパラメーターを含むメソッド宣言は巨大になる可能性があります
3. JSON を PathVariable としてサーバーに送信する
JS ファイル内:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
var object = {name:name,active:active};
jQuery.ajax("/Submit/" + JSON.stringify(object),
{
type:"POST"
});
}
そしてコントローラー
@RequestMapping(value="/Submit/{json}",method=RequestMethod.POST)
publis void submitForm(@RequestParam(value="name") String name, @RequestParam(value="active") Boolean active)
{
//now we are actually doing sth important here, cause we need to parse JSON
}
長所
- ショートリクエストアドレス
- 短いメソッド宣言
短所
- 独自の JSON 解析
4. クラスがマッピングされた RequestBody としての JSON
私のお気に入りの方法ですが、送信されたデータをラップするためだけに複数のクラスを記述する必要があるため、常に可能であるとは限りません JS:
function submitForm() {
var name = jQuery("#name").val();
var active = jQuery("#active").is("checked");
var object = {name:name,active:active};
jQuery.ajax("/Submit/",
{
type:"POST",
data:JSON.stringify(object)
});
そして Java コード:
public class Wrapper {
private String name;
private Boolean active;
//getters and setters
}
@RequestMapping(value="/Submit/",method=RequestMethod.POST)
publis void submitForm(@RequestBody Wrapper wrapper)
{
//all data available with Wrapper class
}
長所
- 目的のオブジェクトへのマッピング
- 迅速かつ簡単
短所
- サーバーに送信されるすべてのデータのラッパーを作成する必要があります
それは私が現在知っているすべてです。感謝と批判、より良い解決策の提案などをお願いします。ありがとう!