[java] Spring MVC-Spring 컨트롤러의 맵에서 모든 요청 매개 변수를 얻는 방법은 무엇입니까?

샘플 URL :

../search/?attr1=value1&attr2=value2&attr4=value4

attr1, att2 및 attr4의 이름을 모릅니다.

요청 매개 변수 이름-> 값의 맵에 액세스 할 수있는 한 이와 비슷한 작업을 수행하고 싶습니다.

@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}

Spring MVC로 어떻게 이것을 달성 할 수 있습니까?



답변

다른 답변은 정확하지만 HttpServletRequest 객체를 직접 사용하는 “봄 방법”은 아닙니다. 대답은 실제로 매우 간단하며 Spring MVC에 익숙 경우 예상 되는 것입니다.

@RequestMapping(value = {"/search/", "/search"}, method = RequestMethod.GET)
public String search(
@RequestParam Map<String,String> allRequestParams, ModelMap model) {
   return "viewName";
}


답변

편집하다

이 데이터를 얻을 수있는 순수한 Spring MVC 메커니즘 이 존재한다는 것이 지적되었다 ( 적어도 3.0에서 ). 다른 사용자의 답변이므로 여기서 자세히 설명하지 않습니다. 참조 AdamGent의 대답 @ 을 참조하십시오.

Spring 3.2 문서에서이 메커니즘은 RequestMappingJavaDoc 페이지와 JavaDoc 페이지 모두에 언급되어 RequestParam있지만 이전에는 RequestMapping페이지 에서만 언급되어 있습니다. 2.5 문서에는이 메커니즘에 대한 언급이 없습니다.

이것은 HttpServletRequest서블릿 -api jar에 의해 정의 된 객체 에 대한 바인딩을 제거하기 때문에 대부분의 개발자에게 선호되는 방법 일 것 입니다.

/편집하다

를 통해 요청 쿼리 문자열에 액세스 할 수 있어야합니다 request.getQueryString().

getQueryString 외에도 query 매개 변수는 request.getParameterMap () 에서 맵 으로 검색 될 수 있습니다 .


답변

HttpServletRequest 객체는 이미 매개 변수 맵을 제공합니다. 자세한 내용은 request.getParameterMap () 을 참조하십시오.


답변

당신은 단순히 이것을 사용할 수 있습니다 :

Map<String, String[]> parameters = request.getParameterMap();

잘 작동합니다


답변

다음은 맵에서 요청 매개 변수가져 오는 간단한 예입니다 .

 @RequestMapping(value="submitForm.html", method=RequestMethod.POST)
     public ModelAndView submitForm(@RequestParam Map<String, String> reqParam)
       {
          String name  = reqParam.get("studentName");
          String email = reqParam.get("studentEmail");

          ModelAndView model = new ModelAndView("AdmissionSuccess");
          model.addObject("msg", "Details submitted by you::
          Name: " + name + ", Email: " + email );
       }

이 경우 studentName 및 studentEmail의 값을 각각 이름 및 이메일 변수와 바인딩합니다.


답변

org.springframework.web.context.request.WebRequest컨트롤러 메소드에서 매개 변수로 사용 하면 메소드가 제공됩니다. getParameterMap()이점은 애플리케이션을 Servlet API에 고정하지 않으며 WebRequest는 JavaEE 패턴 컨텍스트 오브젝트의 예입니다.


답변

두 가지 인터페이스가 있습니다

  1. org.springframework.web.context.request.WebRequest
  2. org.springframework.web.context.request.NativeWebRequest

기본 서블릿 / 포틀릿 API에 연결하지 않고request/session 속성 요청뿐만 아니라 일반 요청 매개 변수 액세스를 허용합니다. .

전의.:

@RequestMapping(value = "/", method = GET)
public List<T> getAll(WebRequest webRequest){
    Map<String, String[]> params = webRequest.getParameterMap();
    //...
}

PS는 있다 컨트롤러 PARAMS로 사용할 수 있습니다 인수에 대한 문서.