Spring mvc Spring MVC-无法将请求参数映射为方法中的映射参数?
我想做的是使用@RequestParam将一个映射传递到控制器中的方法,但它似乎不起作用。而这在Struts 2中作为值绑定工作 以下是我正在尝试的: 在使用JQuery的JSP中:Spring mvc Spring MVC-无法将请求参数映射为方法中的映射参数?,spring-mvc,Spring Mvc,我想做的是使用@RequestParam将一个映射传递到控制器中的方法,但它似乎不起作用。而这在Struts 2中作为值绑定工作 以下是我正在尝试的: 在使用JQuery的JSP中: var order = {}; order['seq'] = "ASC"; var criteria = {}; criteria['label'] = "Directory"; $.post(context + 'menu/list', {"orders" : order, "criteria
var order = {};
order['seq'] = "ASC";
var criteria = {};
criteria['label'] = "Directory";
$.post(context + 'menu/list',
{"orders" : order,
"criterias" : criteria}
我试图发布的参数是“映射”对象顺序和列表菜单的条件。
在Java中:
Spring中的@RequestParam可以用来初始化映射参数吗?可以。看来我找到了原因 在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;
}
}
@SuppressWarnings(“未选中”)
私有对象resolveRequestParam(字符串paramName,需要布尔值,字符串defaultValue,
MethodParameter methodParam、NativeWebRequest webRequest、Object handlerForInitBinderCall)
抛出异常{
类paramType=methodParam.getParameterType();
if(Map.class.isAssignableFrom(paramType)){
返回resolveRequestParamMap((类
Criteria: {criterias[label]=Directory, orders[seq]=ASC}
Order: {criterias[label]=Directory, orders[seq]=ASC}
@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;
}
}