ProgramingTip

HttpServletRequest- 쿼리 인용 데이터 변수 가져 오기, 양식 없음

bestdevel 2020. 11. 14. 10:55
반응형

HttpServletRequest- 쿼리 인용 데이터 변수 가져 오기, 양식 없음


에서 HttpServletRequest의 , getParameterMap모든 쿼리 매개 변수 및 사후 데이터 매개 변수의 맵을 돌려줍니다.

쿼리 보편적 인 변수 만있는 맵을 이용하는 방법이 있습니까? getQueryString을 사용하지 않고 값을 구문 분석하지 않습니다.


cularis가 말한 것과는 수있는 변수 맵에 둘 다 있습니다.

내가 보는 가장 좋은 방법은 parameterMap을 프록시하고 각 매개 변수 검색에 대해 queryString에 "&? <parameterName> ="이 포함되어 있는지 확인하는 것입니다.

Qerub가 지적했듯이 parameterName은 URL로 인코딩해야합니다.

그러면 구문 분석이 절약 된 URL 매개 변수 만 제공됩니다.


request.getQueryString()쿼리는 다음과 같은 경우 사용할 수 있습니다.

username=james&password=pwd

이름을 얻으려면 이렇게 할 수 있습니다.

request.getParameter("username"); 

서블릿 API 쿼리 나 많은 사람들이 사용하는 기능이 부족한 것입니다.

쿼리 매개 변수? foo = bar는 "42 세의 모든 사람"과 같이 자원 (많은 자원의 모음 일 수 있음)을 광범위하게 사용하기 때문에 URL의 일부입니다.

GET / 명? 나이 = 42

POST 또는 PUT의 메시지 본문 변수는 대상 자원에 대한 수정을 표현하기 위해 있습니다. 값을 "hair"속성으로 설정하는 Fx :

PUT / 명? 나이 = 42

머리카락 = 회색

따라서 다음과 같이 사용하는 것이 RESTful 한 것이다. 이 기능은 Java 서블릿 API에서 확실히 없어졌습니다.


다른 답변에 따르면 서블릿 API를 사용하여 쿼리 매개 변수를 사용 방법이 없습니다.

따라서 쿼리 매개 변수를 얻는 가장 좋은 방법은 쿼리를 직접 구문 분석하는 것입니다. (매개 변수를 반복하고 쿼리에 열거하는 변수가 포함되어 있는지 확인하는 것이 더 복잡합니다.)

아래 코드를 작성했습니다. Apache StringUtils 및 ArrayUtils 사용.

public static Map<String, String[]> getQueryParameters(HttpServletRequest request) {
    Map<String, String[]> queryParameters = new HashMap<>();
    String queryString = request.getQueryString();

    if (StringUtils.isEmpty(queryString)) {
        return queryParameters;
    }

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

    for (String parameter : parameters) {
        String[] keyValuePair = parameter.split("=");
        String[] values = queryParameters.get(keyValuePair[0]);
        values = ArrayUtils.add(values, keyValuePair.length == 1 ? "" : keyValuePair[1]); //length is one if no value is available.
        queryParameters.put(keyValuePair[0], values);
    }
    return queryParameters;
}

자바 8

return Collections.list(httpServletRequest.getParameterNames())
                  .stream()
                  .collect(Collectors.toMap(parameterName -> parameterName, httpServletRequest::getParameterValues));

게시물 매개 변수와 별도로 구문 분석 된 쿼리 문자열 매개 변수를 가져올 수있는 방법이 없습니다. BTW 이러한 API가 없다는 사실은 아마도 디자인을 확인해야 함을 의미 할 수 있습니다. POST를 보낼 때 쿼리 문자열을 사용하는 이유는 무엇입니까? 정말로 더 많은 데이터를 URL로 보내려면 REST와 유사한 규칙을 사용하십시오.

http://mycompany.com/myapp/myservlet?first=11&second=22

말하다:

http://mycompany.com/myapp/myservlet/11/22

참고 URL : https://stackoverflow.com/questions/6847192/httpservletrequest-get-query-string-parameters-no-form-data

반응형