我有以下LinkedHashMap,其中我按以下方式放置值:
if (preAuthorizeAnnotation != null) {
requestMappingValues = requestMappingAnnotation.value(); // to get the url value
RequestMethod[] methods = requestMappingAnnotation.method(); // to get the request method type
System.out.println(+i + ":Method : " + method2.getName() + " is secured ");
//System.out.println("Requestion method type : "+methods[0].name());
Class[] parameterTypes = method2.getParameterTypes();
for (Class class1: parameterTypes) {
userDefinedParams = new UserDefinedParams();
strClassNameToFix = class1.getName();
strClassname = strClassNameToFix.replaceAll("\\[L", "").replaceAll("\\;", "");
if (class1.isArray()) {
//classObj = strClassnames.substring(strClassnames.lastIndexOf('.')+1, strClassnames.length()-1);
userDefinedParams.setDataType(strClassname);
userDefinedParams.setIsArray("Y");
paramsList.add(userDefinedParams);
} else if (class1.isPrimitive() && class1.isArray()) {
userDefinedParams.setDataType(strClassname);
userDefinedParams.setIsArray("Y");
paramsList.add(userDefinedParams);
} else {
userDefinedParams.setDataType(strClassname);
userDefinedParams.setIsArray("N");
paramsList.add(userDefinedParams);
}
System.out.println("strClassname : " + strClassname);
}
paramsMap.put("url_" + i, requestMappingValues[0]);
paramsMap.put("params_" + i, paramsList);
我尝试按照以下方式遍历地图:
for (Object key: paramsMap.keySet()) {
uri = "http://localhost:8080/api" + paramsMap.get(key);
statusCode = httpRequest.handleHTTPRequest(client, uri);
System.out.println("Statuscode : " + statusCode);
}
我得到以下异常:
java.lang.IllegalArgumentException
因为它第一次正确获得url
但却错过了params
。
我想分开网址和paramList
,以便我可以处理它。
我正在尝试获取url的url和相应的paramlist,并将paramList转换回userdefined以及进一步处理的值。
答案 0 :(得分:2)
最好的解决方案可能是有两个独立的地图:一个用于网址,另一个用于参数。
但是,您似乎不需要地图,因为您只将它们用作存储网址和参数的列表。因此,您应该考虑为URL使用一个列表,为params使用一个列表,当前附加到字符串的i
是映射中的键,将是列表中的索引:
urls.add(requestMappingValues[0]);
params.add(paramsList);
稍后您只需迭代这些列表以检索插入的值。