私のSpring ControllerのようにMap<MyEnum, String>
いくつか使いたいです。@RequestParam
今のところ、次のことを行いました。
public enum MyEnum {
TESTA("TESTA"),
TESTB("TESTB");
String tag;
// constructor MyEnum(String tag) and toString() method omitted
}
@RequestMapping(value = "", method = RequestMethod.POST)
public void x(@RequestParam Map<MyEnum, String> test) {
System.out.println(test);
if(test != null) {
System.out.println(test.size());
for(Entry<MyEnum, String> e : test.entrySet()) {
System.out.println(e.getKey() + " : " + e.getValue());
}
}
}
これは奇妙な動作です。すべてのパラメーターを取得するだけです。したがって、それを使用して URL を呼び出すと、 が?FOO=BAR
出力されますFOO : BAR
。したがって、 で定義された文字列だけでなく、すべての文字列を確実に取得しMyEnum
ます。
だから私は考えました、どうして param: に名前を付けないのですか@RequestParam(value="foo") Map<MyEnum, String> test
?しかし、パラメータを渡す方法がわからないだけで、常にnull
.
または、これに対する他の解決策はありますか?
したがって、ここをご覧の場合: http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html
それは言います:メソッドパラメーターがMap<String, String>
orMultiValueMap<String, String>
で、パラメーター名が指定されていない場合 [...]。value="foo"
したがって、値を使用して何らかの方法で設定できる必要があります;)
And:メソッド パラメータ タイプがMap
で、リクエスト パラメータ名が指定されている場合、リクエスト パラメータ値はMap
、適切な変換戦略が使用可能であると仮定して変換されます。では、変換戦略をどこで指定するのでしょうか?
今、私は動作するカスタムソリューションを構築しました:
@RequestMapping(value = "", method = RequestMethod.POST)
public void x(@RequestParam Map<String, String> all) {
Map<MyEnum, String> test = new HashMap<MyEnum, String>();
for(Entry<String, String> e : all.entrySet()) {
for(MyEnum m : MyEnum.values()) {
if(m.toString().equals(e.getKey())) {
test.put(m, e.getValue());
}
}
}
System.out.println(test);
if(test != null) {
System.out.println(test.size());
for(Entry<MyEnum, String> e : test.entrySet()) {
System.out.println(e.getKey() + " : " + e.getValue());
}
}
}
Springがこれを処理できれば、きっともっといいでしょう...