스프링 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 매뉴얼에서는 이 메커니즘이 양쪽에서 언급되어 있습니다.RequestMapping
JavaDoc 페이지 및RequestParam
JavaDoc 페이지(단, 이전 버전에서는RequestMapping
페이지. 2.5 문서에는 이 메커니즘에 대한 언급이 없습니다.
이 방법은 대부분의 개발자에게 선호되는 접근법일 수 있습니다.이는 (적어도 이)에 대한 바인딩을 배제하기 때문입니다.HttpServletRequest
servlet-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개의 인터페이스가 있습니다.
org.springframework.web.context.request.WebRequest
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
'programing' 카테고리의 다른 글
Vuex 스토리지의 데이터가 vue 구성 요소에 표시되지 않음 (0) | 2022.08.09 |
---|---|
변수 유형 선언 방법 Python C style (0) | 2022.08.08 |
VueJ에서 [_ob__: Observer] 요소에 액세스하는 방법 (0) | 2022.08.08 |
코드스타일; 주석 앞 또는 뒤에 javadoc을 넣습니까? (0) | 2022.08.08 |
Linux: 소켓에서 타임아웃이 발생한 읽기 또는 recv가 있습니까? (0) | 2022.08.08 |