4

Spring のドキュメントから、次のものを取得しました。

public @interface RequestParam

メソッド パラメーターを Web 要求パラメーターにバインドする必要があることを示す注釈。サーブレットおよびポートレット環境のアノテーション付きハンドラー メソッドでサポートされます。

...

メソッド パラメーターが Map または MultiValueMap で、パラメーター名が指定されていない場合、マップ パラメーターにはすべての要求パラメーターの名前と値が入力されます。

これで、テスト用のコントローラーが作成されました。GET メソッドと POST メソッドがあり、それぞれ@RequestParam java.util.Mapを唯一のパラメーターとして使用します。メソッド本体では、マップのサイズのみを印刷しようとしています。GET メソッドでのみリクエスト (GET/POST) を送信すると、マップにキーと値のペアが含まれます。私は Firefox で Poster アドオンを使用しており、3 つのパラメーターを送信しています。

import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @RequestMapping(value="test/method", method = RequestMethod.GET)
    @ResponseBody
    public String testmethodGet(@RequestParam Map<String, String> params) {

        System.out.println("GET: " + params.size()); // prints GET: 3   
        return "";

    }

    @RequestMapping(value="test/method", method = RequestMethod.POST)
    @ResponseBody
    public String testmethodPost(@RequestParam Map<String, String> params) {

        System.out.println("POST: " + params.size()); // prints POST: 0
        return "";

    }

}

@RequestParam Map が POST リクエストで機能しない理由、またはそれを機能させるために何かを変更する必要があるかどうかを知っている人はいますか?

ありがとう。

4

2 に答える 2

8

実際には、GET メソッドと POST メソッドで動作します。それはもっぱら私のせいでした。実際に POST リクエストにパラメーターを渡すと、最初に指定されたコードが機能します。

有効なリクエストを送信する方法として、次の JS ( jQuery ) コードを検討してください。

$.ajax({
    type: "POST",
    url: "test/method",
    data: { param1: param1, param2: param2, param3: param3 },
    success: function(data) {
        console.log("testPost successful!");
    },    
    dataType: "html", // expected return value type
    error: function(data, status, error) {
        console.log("testPost with errors!");
    }
});
于 2013-05-29T12:23:21.607 に答える
2

StringSpring は、受信したrequest paramをマップに変換する方法を知りません。

リクエスト パラメーター、パス変数、リクエスト ヘッダー、Cookie 値など、リクエストから抽出された文字列ベースの値は、メソッド パラメーターまたはフィールドのターゲット タイプに変換する必要がある場合があります (たとえば、リクエスト パラメーターを @ModelAttribute のフィールドにバインドする)。パラメータ) にバインドされています。ターゲットの型が String でない場合、Spring は自動的に適切な型に変換します。int、long、Date などのすべての単純型がサポートされています。WebDataBinder (「WebDataBinder の初期化のカスタマイズ」を参照) を介して、または Formatters を FormattingConversionService に登録することにより (セクション7.6「Spring 3 フィールドのフォーマット」を参照)、変換プロセスをさらにカスタマイズできます。

HttpServletReqeustSpring は、 を介してマップを取得するために使用できるを介してマップのサポートを提供しますgetParameterMap()

   @RequestMapping(value="test/method", method = RequestMethod.POST)
    @ResponseBody
    public String testmethodPost(HttpServletRequest request) {

        System.out.println("POST: " + request.getParameterMap().size()); // prints POST: 0
        return "";

    }
于 2013-05-29T08:41:00.087 に答える