programing

스프링 MVC - 스프링 컨트롤러에서 맵의 모든 요청 매개 변수를 가져오려면 어떻게 해야 합니까?

goodsources 2022. 8. 8. 20:08
반응형

스프링 MVC - 스프링 컨트롤러에서 맵의 모든 요청 매개 변수를 가져오려면 어떻게 해야 합니까?

샘플 URL:

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

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

이와 같은 작업을 수행할 수 있으면 좋겠습니다(또는 Map of request param name -> 값에 액세스할 수 있는 한 이와 유사한 작업은 상관없습니다).

@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로 어떻게 하면 좋을까요?

다른 답변은 맞지만 Http ServletRequest 개체를 직접 사용하는 것은 "스프링 방식"이 아닙니다.정답은 사실 매우 간단하며 봄 MVC에 익숙하다면 예상할 수 있는 입니다.

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

편집

데이터를 얻을 수 있는 순수한 스프링 MVC 메커니즘이 존재한다고 지적되어 왔다.다른 사용자의 답변이므로, 자세한 내용은 여기에 기재하지 않습니다.자세한 내용은 @AdamGent의 답변을 참조해 주십시오.또, 업베이트도 잊지 말아 주세요.

Spring 3.2 매뉴얼에서는 이 메커니즘이 양쪽에서 언급되어 있습니다.RequestMappingJavaDoc 페이지 및RequestParamJavaDoc 페이지(단, 이전 버전에서는RequestMapping페이지. 2.5 문서에는 이 메커니즘에 대한 언급이 없습니다.

이 방법은 대부분의 개발자에게 선호되는 접근법일 수 있습니다.이는 (적어도 이)에 대한 바인딩을 배제하기 때문입니다.HttpServletRequestservlet-api jar에 의해 정의된 오브젝트.

/편집

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

getQueryString 외에 쿼리 파라미터는 request.getParameterMap()에서 Map으로 취득할 수도 있습니다.

다음은 에 접속하는 간단한 예입니다.

@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와 함께name
  • studentEmail와 함께email

HttpServletRequest 객체는 이미 파라미터 맵을 제공하고 있습니다.자세한 내용은 request.getParameterMap()참조하십시오.

간단하게 사용할 수 있습니다.

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

잘 될 거야

사용하다org.springframework.web.context.request.WebRequest컨트롤러 메서드의 파라미터로서 이 메서드를 제공합니다.getParameterMap()어플리케이션을 Servlet API에 밀착시키지 않는 것이 장점입니다.WebRequest는 JavaEE 패턴 컨텍스트오브젝트의 예입니다.

2개의 인터페이스가 있습니다.

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

범용 요구 파라미터 액세스 및request/session네이티브 Servlet/Portlet API와 관련되지 않은 속성 액세스.

예:

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

추신: 컨트롤러 파라미터로 사용할 수 있는 인수에 대한 Docs가 있습니다.

파티에 늦을지도 모르지만, 제가 아는 바로는, 당신은 다음과 같은 것을 찾고 있습니다.

for(String params : Collections.list(httpServletRequest.getParameterNames())) {
    // Whatever you want to do with your map
    // Key : params
    // Value : httpServletRequest.getParameter(params)                
}
@SuppressWarnings("unchecked")
Map<String,String[]> requestMapper=request.getParameterMap();
JsonObject jsonObject=new JsonObject();
for(String key:requestMapper.keySet()){
    jsonObject.addProperty(key, requestMapper.get(key)[0]);
}

는 든든라 all all에 됩니다.jsonObject.

쿼리 파라미터와 패스 파라미터 사이에는 기본적인 차이가 있습니다. 있어요.www.your_domain?queryparam1=1&queryparam2=2 parameters - query parameters. - query param www.your_domain/path_param1/entity/path_param2 parameters - '경로 파라미터'.

내가 놀라운 것을 발견한 것은 봄 MVC 세계에서는 많은 사람들이 하나를 다른 것으로 혼동한다는 것이다.쿼리 매개 변수는 검색 기준에 가깝지만 경로 매개 변수는 리소스를 고유하게 식별합니다.그러나 리소스 구조가 중첩될 수 있기 때문에 URI에 여러 경로 매개 변수를 포함할 수 없는 것은 아닙니다.예를 들어, 특정 사용자의 특정 자동차 리소스가 필요하다고 가정해 보겠습니다.

www.my_site/customer/15/car/2 - 15번째 손님의 세컨드카를 찾습니다.

모든 경로 파라미터를 맵에 포함시킬 경우 어떤 사용 사례가 있습니까?URI 자체를 볼 때 경로 파라미터에는 "키"가 없습니다.이 맵 내의 키는 다음과 같이 @Mapping 주석에서 가져옵니다.

@GetMapping("/booking/{param1}/{param2}")

HTTP/REST 관점에서는 경로 파라미터를 맵에 투영할 수 없습니다.스프링의 유연성과 개발자들의 변덕을 수용하려는 욕구가 전부라고 생각합니다.

경로 파라미터에는 맵을 사용하지 않지만 쿼리 파라미터에는 매우 유용합니다.

언급URL : https://stackoverflow.com/questions/7312436/spring-mvc-how-to-get-all-request-params-in-a-map-in-spring-controller

반응형