?-6ren"> ?-我想用一些Map如@RequestParam在我的 Spring Controller 中。现在我做了以下事情: public enum MyEnum { TESTA("TESTA"), -6ren">
gpt4 book ai didi

spring - 如何在 Spring Controller 中使用 @RequestParam(value ="foo") Map

转载 作者:行者123 更新时间:2023-12-04 04:48:43 25 4
gpt4 key购买 nike

我想用一些Map<MyEnum, String>@RequestParam在我的 Spring Controller 中。现在我做了以下事情:

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());
}
}
}

这很奇怪:我只得到了每个参数。所以如果我用 ?FOO=BAR 调用 URL它输出 FOO : BAR .所以它肯定需要每个字符串,而不仅仅是 MyEnum 中定义的字符串.

所以我想,为什么不命名参数: @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>MultiValueMap<String, String>并且未指定参数名称[...]。所以一定可以使用 value="foo"并以某种方式设置值;)

并且:如果方法参数类型是 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可以处理这个肯定会更好......

最佳答案

@RequestParam(value="foo") Map<MyEnum, String> 

以上工作: -
您必须以以下格式传递值
foo[MyTestA]= 酒吧
foo[MyTestB]= bar2

现在将诸如“MyTestA”、“MyTestB”等字符串绑定(bind)到您的 MyEnum
您必须定义一个转换器。看看这个 link

关于spring - 如何在 Spring Controller 中使用 @RequestParam(value ="foo") Map<MyEnum, String>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com