关注RequestParam value in spring MVC to be case insensitive后,我在方法中添加了HttpServletRequest
参数。但我添加了近20个IF条件,以获得完整的不区分大小写的URL。
我知道这是完全痛苦和丑陋的编码方式。我请求任何人给出一个惊人的解决方案。
我需要一个不区分大小写的请求参数。我发送的请求参数是orgID。该参数将以不同的方式出现。说Orgid
,oRgid
,orGid
,orgID
.......等等
我无法直接以request.getParamter ("orgID")
的方式执行此操作。为此,我添加了许多条件。 :-(正如我所说,完全难看的编码。
答案 0 :(得分:2)
private String getCaseInsensitiveOrgIdParameter(HttpServletRequest request) {
for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
String paramName = entry.getKey();
if ("orgid".equals(paramName.toLowerCase()) {
return entry.getValue()[0];
}
}
return null;
}
但我仍坚持我的立场:发送此参数的其他应用程序是应修复的应用程序。如果参数为orgId
,则应发送orgId
。不是orGid
或其他任何内容。如果他们懒惰(或愚蠢)足以发送orGid
而非orgId
,则无法保证他们不会发送ogrId
。那你会做什么?
答案 1 :(得分:2)
虽然这个概念是错误的(在不同情况下获取params并不好),但以下代码片段有效:
String getCaseInsensitiveParameter(HttpServletRequest request){
Map params = request.getParameterMap();
Iterator i = params.keySet().iterator();
while ( i.hasNext() )
{
String key = (String) i.next();
String value = ((String[]) params.get( key ))[ 0 ];
if ("orgid".equals(key.toLowerCase()) {
return value;
}
}
return null;
}
答案 2 :(得分:1)
你可以有一个Spring MVC处理程序拦截器(org.springframework.web.servlet Interface HandlerInterceptor),它接受一个参数名称并将其“转换”为标准名称。
类似于:如果请求中的参数名称以“id”结尾,无论哪种情况(除了“Id”除外)都比参数更新,复制它并将其添加到名称“xxxId”。
然后您只需要检查请求方法的规范化表单。
@See:快速介绍一下Handler拦截器:this blog(关注最后一个代码块是一个改进的想法,它不起作用)
答案 3 :(得分:0)
您应该使用equalsIgnoreCase
方法:
public String getRequestParameter(HttpServletRequest request, String parameter){
for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
if(entry.getKey().equalsIgnoreCase(parameter)){
return entry.getValue()[0];
}
}
return null;
}
或者如果您将请求作为实例变量:
public String getRequestParameter(String parameter){
for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
if(entry.getKey().equalsIgnoreCase(parameter)){
return entry.getValue()[0];
}
}
return null;
}
答案 4 :(得分:0)
我的解决方案:只需创建一个新的params地图对象,并使用小写的密钥填充它。然后使用此参数图而不是原始对象。然后你可以要求小写密钥。我是这样做的(使用Apache Wicket的PageParameters类):
byte[] res ={-2,-1,0,114,0,101,0,115,0,117,0,108,0,116,0,13,0,10,0,73,0,32,0,108,0,111,0,118,0,101,0,32,0,73,0,110,0,100,0,105,0,97,0,43,0,52,0,51};
InputStream isr = new BufferedInputStream(new ByteArrayInputStream(res));
String mimeType = URLConnection.guessContentTypeFromStream(isr);
System.out.println(mimeType);
答案 5 :(得分:0)
如果您有权访问Java 8:
request.getParameterMap().stream()
.collect(Collectors.toMap(e -> e.getKey().toLowerCase(), e.getValue()))
.get("orgID");