2013-10-01 1 views
0

내 응용 프로그램에서는 요청의 매개 변수를 추출하여 쿼리 문자열에 나타나는 순서대로 컬렉션에 넣어야합니다. 예를 들어HttpServletRequest.getReader 및 getParameterValues의 간섭을 피하는 방법?

, 송신기는 다음 요청을 할 경우,

http://myapp.com/myrequest?param3=value3&param2=value2&param1=value1

,

I의 요소가이 순서로 배치되어있는 수집, 생성해야 3 당겨, PARAM2, PARAM1한다.

이렇게하려면 먼저 아래에 표시된 getParameterNames 메서드를 사용하여 매개 변수의 이름을 추출합니다.

private List<String> getParameterNames(HttpServletRequest aRequest) 
    throws IOException { 
    final List<String> parameterNames = new LinkedList<>(); 
    final BufferedReader reader = aRequest.getReader(); 
    final String queryString = IOUtils.toString(reader); 

    final String[] parameterValuePairs = queryString.split("&"); 

    for (String parameterValuePair : parameterValuePairs) { 
     final String[] nameValueArray = parameterValuePair.split("="); 

     parameterNames.add(nameValueArray[0]); 
    } 
    return parameterNames; 
} 

문제 : 지금까지 매개 변수 이름이 방법의 invokation, aRequest.getParameterValue(...) 반환 null 후.

그렇지 않으면 - 먼저 매개 변수 맵을 저장하고 getParameterNames을 호출하면 그 결과는 null입니다. (다른 곳에서 나는이 문제가 발생할 수 있음을 읽기)

  1. reader.close()getParameterNames에 호출되지 않습니다 있는지 확인하십시오
    final Map<String,String[]> parameterMap = aRequest.getParameterMap(); 
    final List<String> parameterNames = getParameterNames(aRequest); 
    

    나는 다음과 같은 일을 시도했다.
  2. reader.reset()을 호출하십시오.

아무 것도 도움이되지 않았습니다.

HttpServletRequest에서 쿼리 문자열의 매개 변수 모양에 따라 정렬 된 매개 변수 - 값 쌍 목록을 어떻게 구할 수 있습니까?

답변

0

첫 번째 방법을 사용하면 Reader을 사용하여 매개 변수를 가져올 필요가 없습니다. 대신 다음을 수행하십시오.

final List<String> parameterNames = new LinkedList<>(); 
final String queryString = query.getQueryString(); // get query string from query itself 
// rest of your code stays unchanged 

요청 입력 스트림의 데이터를 한 번만 읽을 수 있기 때문에 작동하지 않는 이유가 있습니다.

아니면 내가 잘못하고 그렇지 않은 경우, 당신은 LinkedHashMap에 매개 변수와 그 값을 저장할 수 있습니다

final LinkedHashMap<String, String> parameterValues = new LinkedHashMap<>(); 
final BufferedReader reader = aRequest.getReader(); 
final String queryString = IOUtils.toString(reader); 

final String[] parameterValuePairs = queryString.split("&"); 

for (String parameterValuePair : parameterValuePairs) { 
    final String[] nameValueArray = parameterValuePair.split("="); 
    parameterValues.put(nameValueArray[0], nameValueArray[1]); 
} 

지금 parameterValues가 나타나는 순서로 정렬 항목이지도입니다.