Spring MVC에서 포스트 데이터를 명시 적으로 얻는 방법은 무엇입니까?


81

게시물 데이터 자체를 얻을 수있는 방법이 있습니까? 스프링이 포스트 데이터를 자바 객체에 바인딩하는 것을 알고 있습니다. 그러나 처리하려는 두 필드가 주어진 경우 해당 데이터를 어떻게 얻을 수 있습니까?

예를 들어 내 양식에 두 개의 필드가 있다고 가정합니다.

 <input type="text" name="value1" id="value1"/>
 <input type="text" name="value2" id="value2"/>

컨트롤러에서 해당 값을 검색하려면 어떻게해야합니까?

답변:


135

내장 컨트롤러 인스턴스 중 하나를 사용하는 경우 컨트롤러 메서드에 대한 매개 변수 중 하나가 Request 객체가됩니다. request.getParameter("value1")POST (또는 PUT) 데이터 값을 가져 오기 위해 호출 할 수 있습니다 .

Spring MVC 어노테이션을 사용하는 경우, 메소드의 매개 변수에 어노테이션이있는 매개 변수를 추가 할 수 있습니다.

@RequestMapping(value = "/someUrl")
public String someMethod(@RequestParam("value1") String valueOne) {
 //do stuff with valueOne variable here
}

1
이것은 여러 요청 매개 변수와 함께 작동합니까? 당신은 하나의 개체로 포장 할 필요가 없습니까? stackoverflow.com/q/12862320/106261
NimChimpsky

1
원하지 않는 경우 <배 3이 / (검색 폼 또는 연락처 양식 등) 모델 지원을받는 형태가 필요합니다
돈 치들

37

OP의 정확한 질문에 대한 또 다른 대답은 consumes콘텐츠 유형을 로 설정 "text/plain"한 다음 @RequestBody String입력 매개 변수 를 선언하는 것 입니다. 이렇게하면 POST 데이터의 텍스트가 선언 된 String변수로 전달됩니다 ( postPayload다음 예제에서).

물론 이것은 POST 페이로드가 텍스트 데이터라고 가정합니다 (OP에 명시된 경우).

예:

    @RequestMapping(value = "/your/url/here", method = RequestMethod.POST, consumes = "text/plain")
    public ModelAndView someMethod(@RequestBody String postPayload) {    
        // ...    
    }

3
이것이 제가 찾고 있던 답입니다. '게시물 데이터 자체'로 나는 똑같이 이해합니다. 감사!
mauromartini

여러 개의 게시 매개 변수 (예 : value1value2)의 경우 두 값에 대해 하나의 문자열을 생성합니까? 그런 다음 개별 값을 구문 분석해야합니다. 허용 된 답변 에서처럼 각 값을 개별적으로 지정 / 얻을 수 있는데 왜 그렇게합니까?
Don Cheadle

1
@mmcrae-단순히 문제를 해결하는 또 다른 방법이며, POST 매개 변수가 여러 개 없지만 텍스트 또는 바이너리 데이터의 한 덩어리 만있는 다른 사용자에게 유용 할 수 있습니다. 그것이 제 상황이었고 제가이 질문을 클릭했을 때 배우고 싶었던 것입니다.
simon

1
내가 찾던 바로 그것. json을 게시하는 경우에도 소비 s = "application / json"과 함께 작동합니다.
Manish

여보세요. Postman 을 사용하여 API를 테스트하고 있습니다. Postman은 POST의 본문을 데이터로 채우도록 도와줍니다. 문제는 내가 사용할 때 403을 얻는다는 것입니다 RequestMethod.POST. 추가하기도 @CrossOrigin(origins = "*")했지만 여전히 똑같은 결과를 얻었습니다 ... 무슨 일이 일어나고 있는지 모르겠습니다 ... 귀하의 답변과 동일한 서명을 사용했습니다 ( 제 경우에는 someMethoda 를 반환하는 String경우 제외 ) ...
Kurt Miller

27

Spring MVC는 Servlet API 위에서 실행됩니다. 따라서 HttpServletRequest#getParameter()이를 위해 사용할 수 있습니다 .

String value1 = request.getParameter("value1");
String value2 = request.getParameter("value2");

HttpServletRequest이미의 메소드 인자의 하나로서 스프링 MVC 안에 당신이 사용할 수 있어야 handleRequest()하는 방법.


1
Hai @BalusC, 제 경우에는 요청에 20 개 이상의 변수가 있습니다. 그러나 모든 요청 매개 변수가있는 빈이 있습니다. 이제 하나씩 가져 오는 대신 요청에서 모든 값을 Bean으로 가져오고 싶습니다. "ModelDrivenBean"을 사용하여 struts2에이 기능이 있습니다. 스프링 프레임 워크에 이와 같은 기능이 있습니까?
vissu

2
예, @ModelAttribute 어노테이션과 양식 지원 Bean을 사용합니다. 이 링크는 그 방법을 잘 설명합니다 : viralpatel.net/blogs/2010/07/spring-3-mvc-handling-forms.html

당신은 20 개 이상의 변수가있는 경우 @vissu 당신은 정말 간단하게 살펴 봐야
CodeMonkey

1
안녕하세요 BalusC. 아래 simmon의 답변에 따라 Postman 을 사용하여 API를 테스트하고 있습니다. Postman은 POST의 본문을 데이터로 채우도록 도와줍니다. 문제는 내가 사용할 때 403을 얻는다는 것입니다 RequestMethod.POST. 추가도 @CrossOrigin(origins = "*")했지만 여전히 똑같은 결과를 얻습니다 ... 무슨 일이 일어나고 있는지 모르겠습니다 ... 귀하의 답변과 동일한 서명을 사용했습니다 ( 제 경우에는 someMethoda 를 반환하는 String경우 제외 ) ...
Kurt Miller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.