2012-01-23 7 views
2

RequestParam value in spring MVC to be case insensitive을 따른 후 내 방법에 HttpServletRequest 매개 변수를 추가했습니다. 그러나 나는 거의 20 개의 IF 조건에 완전한 대소 문자를 구분하지 않는 URL을 추가했습니다.HttpServletRequest 매개 변수의 값이 낮습니다

이것은 완전히 고통스럽고 추악한 코딩 방법입니다. 나는 누군가에게 이것에 대한 놀라운 해결책을 제시 할 것을 요청한다.

대소 문자를 구분하지 않는 요청 매개 변수가 필요합니다. 보내는 요청 매개 변수는 orgID입니다. 이 매개 변수는 다른 방식으로 제공 될 것입니다. 말 Orgid, oRgid, orGid, orgID ....... 등등 -에

내가 request.getParamter ("orgID")로 직접이 작업을 수행 할 수 없습니다. 이것을 위해 나는 많은 조건을 추가하고있다. :-(내가 말했듯이, 완전히 추한 코딩

답변

2

는 다음과 같은 코드가 작동 (서로 다른 경우에 PARAMS를 얻기 위해 좋지 않다) 인스턴스 변수로 요청한 경우 :

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; 
} 
+2

또는 .equalsIgnoreCase()를 사용하여 명시 적으로 소문자 복사본을 만드는 비용을 들이지 않고도 정규식 테스트를 수행 할 수 있습니다. – Ajax

+0

@Ajax : 나는 동의합니다. – Arun

1

당신이 할 수있는 스프링 MVC 핸들러 인터셉터 매개 변수 이름과는 그것에게 표준화 된 이름 "변환"걸릴 (org.springframework.web.servlet Interface HandlerInterceptor) 같은

뭔가가 있습니다..은 if 요청의 매개 변수 이름이 "id"로 끝나는 경우 (정확히 "ID"제외) 매개 변수를 가져 와서 "xxxId"이름으로 복사 한 다음 "xxxId"라는 이름으로 추가하십시오.

요청 된 메소드를 정규화 된 형태로 확인하십시오.

@See : Handler 인터셉터에 대한 간략한 소개 : this blog

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을 보내지 않을 것입니다. 그 때 당신은 무엇을 할 것입니까?

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; 
} 
+0

덕분에 많이 JB :

Map paramsOriginal = request.getParameterMap(); PageParameters paramsNew = new PageParameters(); Iterator<String> i = paramsOriginal.keySet().iterator(); while(i.hasNext()) { String key = (String) i.next(); String value = ((String[]) paramsOriginal.get(key))[0]; //lowercase the key paramsNew.put(key.toLowerCase(), value); } //request the value of a lowercased key String orgid = paramsNew.getString("orgid"); 
Arun

+1

위에서 언급했듯이 .toLowerCase() 복사본을 명시 적으로 생성하는 대신 .equalsIgnoreCase()를 사용한다. – Ajax

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

또는이 개념은 잘못이지만

0

My solutio n : 간단히 새로운 params 맵 객체를 생성하고 그것을 lowercased 키로 채 웁니다. 다음 orignal 개체 대신이 params 맵을 사용하십시오. 그런 다음 소문자로 된 키를 요청할 수 있습니다. 나는 (아파치 개찰구의 PageParameters 클래스를 사용하여) 이런 식으로했다 :

request.getParameterMap().stream() 
    .collect(Collectors.toMap(e -> e.getKey().toLowerCase(), e.getValue())) 
    .get("orgID"); 
0

자바 (8)에 액세스 할 수있는 경우

. 아주 좋은 해결책. 그 일. 이제 그들은 ur 질의 응답을받습니다. // 게으른 (또는 어리석은) 사람이 보내거나 org 대신에 보낼 수있는 사람이라면, 오그라드를 보내지 않을 것입니다. 그러면 당신은 무엇을 할 것입니까? //. 나는 서류들을 넣고 우리 회사에서 도망 갈 것이다.이미 디자인이 조금 이상하다. 나는 개인적으로 느낀다.
관련 문제