ハイパーリンクがクリックされ、次のパラメーターリストmyparam=myValue1&myparam=myValue2&myparam=myValue3
でURLが起動されるとします。 Spring MVCで@RequestParam
を使用してすべてのパラメータをキャプチャするにはどうすればよいですか?
私の要件は、すべてのパラメーターをキャプチャして、マップに配置する必要があることです。
助けてください!
@RequestMapping(value = "users/newuser", method = RequestMethod.POST)
public String saveUser(@RequestParam Map<String,String> requestParams) throws Exception{
String userName=requestParams.get("email");
String password=requestParams.get("password");
//perform DB operations
return "profile";
}
上記の方法でRequestParamを使用できます。
あなたが得ることができないようです
Map<String,String>
すべてのパラメータが同じ名前「myparam」を持っているため
代わりにこれを試してください:
public ModelAndView method(@RequestParam("myparam") List<String> params) { }
すべてのパラメーターを一度に取得するには、これを試してください:
public ModelAndView postResultPage(@RequestParam MultiValueMap<String, String> params)
この機能については、@RequestParam
Java doc(3.段落):
メソッドパラメーターをWeb要求パラメーターにバインドする必要があることを示す注釈。サーブレットおよびポートレット環境の注釈付きハンドラーメソッドでサポートされています。
メソッドパラメータタイプがMapで、リクエストパラメータ名が指定されている場合、リクエストパラメータ値は、適切な変換戦略が利用可能であると仮定してMapに変換されます。
メソッドパラメータが
Map<String, String>
またはMultiValueMap<String, String>
およびパラメーター名が指定されていない場合、マップパラメーターにはすべてのリクエストパラメーター名と値が入力されます。
Spring 3.0以降、 MultiValueMap を使用してこれを実現することもできます。
初歩的な例は次のとおりです。
public String someMethod(@RequestParam MultiValueMap<String,String> params) {
final Iterator<Entry<String, List<String>>> it = params.entrySet().iterator();
while(it.hasNext()) {
final String k = it.next().getKey();
final List<String> values = it.next().getValue();
}
return "dummy_response";
}
Spring mvcはList<Object>
、Set<Object>
およびMap<Object>
パラメーターをサポートできますが、@ RequestParamは使用できません。
オブジェクトがList<Object>
の場合、例としてUser.Java
を使用すると、次のようになります。
public class User {
private String name;
private int age;
// getter and setter
}
そして、あなたはList<User>
のパラメータを渡したい、あなたはこのようなURLを使用することができます
http://127.0.0.1:8080/list?users[0].name=Alice&users[0].age=26&users[1].name=Bob&users[1].age=16
URLをエンコードすることを忘れないでください。エンコード後のURLは次のようになります。
http://127.0.0.1:8080/list?users%5B0%5D.name=Alice&users%5B0%5D.age=26&users%5B1%5D.name=Bob&users%5B1%5D.age=16
List<Object>
、Set<Object>
、およびMap<Object>
の例は、 my github に表示されます。
誰かがSpring Bootで同じことをしようとしている場合は、RequestBody
の代わりにRequestParam
を使用してください