Spring MVC @Controllerに次のメソッドがあります。
@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam(value="test") Map<String, String> test) {
(...)
}
私はこれを次のように呼びます:
http://myUrl?test[A]=ABC&test[B]=DEF
ただし、「テスト」RequestParam変数は常にnullです。
「テスト」変数を入力するために何をしなければなりませんか?
メソッドパラメータがMapまたはMultiValueMapであり、パラメータ名が指定されていない場合、マップパラメータにはすべてのリクエストパラメータ名と値が入力されます。
したがって、このように定義を変更します。
@RequestMapping(method = RequestMethod.GET)
public String testUrl(@RequestParam Map<String, String> parameters)
{
(...)
}
そして、あなたがあなたのパラメータでURLを呼び出した場合 http:// myUrl?A = ABC&B = DEF
あなたはあなたの方法で持っているでしょう
parameters.get("A");
parameters.get("B");
Springには、同じ名前の複数のパラメーターからHashMapへのデフォルトの変換戦略はありません。ただし、リスト、配列、またはセットに簡単に変換できます。
@RequestMapping(value = "/testset", method = RequestMethod.GET)
public String testSet(@RequestParam(value = "test") Set<String> test) {
return "success";
}
http://localhost:8080/mappings/testset?test=ABC&test=DEF
のような郵便配達員でテストしました
データを持つセットが表示されます[ABC、DEF]
Springで入力する必要があるマップを含む新しいクラスを作成し、そのクラスを@RequestMapping
アノテーション付きメソッドのパラメーターとして使用できます。
あなたの例では、新しいクラスを作成します
public static class Form {
private Map<String, String> test;
// getters and setters
}
次に、Form
をメソッドのパラメーターとして使用できます。
@RequestMapping(method = RequestMethod.GET)
public String testUrl(Form form) {
// use values from form.getTest()
}