web-dev-qa-db-ja.com

Spring MVCは@RequestParam Map <String、String>に入力します

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です。

「テスト」変数を入力するために何をしなければなりませんか?

詳細はこちら https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

メソッドパラメータが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");
7
zatopek

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]

2
Amit K Bist

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()
}
0
user2456718