gpt4 book ai didi

spring-mvc - Spring MVC - 无法将请求参数映射为方法中的映射参数?

转载 作者:行者123 更新时间:2023-12-03 11:33:46 25 4
gpt4 key购买 nike

我想要做的是使用@RequestParam 将映射传递给Controller 中的方法,但它似乎不起作用。虽然这在 Struts 2 中作为值绑定(bind)工作。

以下是我正在尝试的:
在使用 JQuery 的 JSP 中:

var order = {};
order['seq'] = "ASC";
var criteria = {};
criteria['label'] = "Directory";

$.post(context + 'menu/list',
{"orders" : order,
"criterias" : criteria}

我要发布的参数是“ map ”对象顺序和列表菜单的标准。
在 Java 中:
    @RequestMapping("/{collection}/list")
public @ResponseBody Map<String, ? extends Object> list(@PathVariable String collection,
@RequestParam("criterias") Map<String, String> criteria,
@RequestParam("orders") Map<String, String> order) {

但是,当我在 Java 中打印出 map 标准和顺序时,它会采用以下所有值:
Criteria: {criterias[label]=Directory, orders[seq]=ASC}
Order: {criterias[label]=Directory, orders[seq]=ASC}

Spring中的@RequestParam可以用来初始化Map参数吗?

最佳答案

好的。看来我找到原因了。

在 HandlerMethodInvoker.java 中

@SuppressWarnings("unchecked")
private Object resolveRequestParam(String paramName, boolean required, String defaultValue,
MethodParameter methodParam, NativeWebRequest webRequest, Object handlerForInitBinderCall)
throws Exception {

Class<?> paramType = methodParam.getParameterType();
if (Map.class.isAssignableFrom(paramType)) {
return resolveRequestParamMap((Class<? extends Map>) paramType, webRequest);
}}


private Map resolveRequestParamMap(Class<? extends Map> mapType, NativeWebRequest webRequest) {
Map<String, String[]> parameterMap = webRequest.getParameterMap();
if (MultiValueMap.class.isAssignableFrom(mapType)) {
MultiValueMap<String, String> result = new LinkedMultiValueMap<String, String>(parameterMap.size());
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
for (String value : entry.getValue()) {
result.add(entry.getKey(), value);
}
}
return result;
}
else {
Map<String, String> result = new LinkedHashMap<String, String>(parameterMap.size());
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
if (entry.getValue().length > 0) {
result.put(entry.getKey(), entry.getValue()[0]);
}
}
return result;
}
}

当它检查我的 @RequestParam 注释参数是否为 Map 类类型时,它将所有请求参数作为 MultiValueMap 或 Linked HashMap 放入此参数

关于spring-mvc - Spring MVC - 无法将请求参数映射为方法中的映射参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2887038/

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