2013-07-31 4 views
34

스프링 mvc를 사용하고 있습니다. 그리고 method = post 일 때 url에서 param을 얻을 수 없습니다. 그러나 메소드를 GET으로 변경하면 모든 매개 변수를 가져올 수 있습니다.방법은 게시 봄 mvc에서 param을 얻는 방법?

이 내 형태 :

<form method="POST" action="http://localhost:8080/cms/customer/create_customer" id="frmRegister" name ="frmRegister" enctype="multipart/form-data"> 
    <input class ="iptRegister" type="text" id="txtEmail" name="txtEmail" value="" /> 
    <input class ="iptRegister" type="password" id="txtPassword" name="txtPassword" value="" /> 
    <input class ="iptRegister" type="text" id="txtPhone" name="txtPhone" value="" /> 

    <input type="button" id="btnRegister" name="btnRegister" value="Register" onclick="" style="cursor:pointer"/> 
</form> 

이 내 컨트롤러 :

@RequestMapping(value= "/create_customer", method = RequestMethod.POST) 
@ResponseBody 
public String createCustomer(HttpServletRequest request, 
     @RequestParam(value="txtEmail", required=false) String email, 
     @RequestParam(value="txtPassword", required=false) String password, 
     @RequestParam(value="txtPhone", required=false) String phone){ 

    ResultDTO<String> rs = new ResultDTO<String>(); 
    rs.setStatus(IConfig.SHOW_RESULT_SUCCESS_ON_MAIN_SCREEN); 
    try{ 
     Customer c = new Customer(); 
     c.setEmail(email); 
     c.setPassword(password); 
     c.setPhone(phone); 
     customerService.insert(c); 
     rs.setData("Insert success"); 
    }catch(Exception ex){ 
     log.error(ex); 
     rs.setStatus(IConfig.SHOW_RESULT_ERROR_ON_MAIN_SCREEN); 
     rs.setData("Insert failure"); 
    } 
    return rs.toString(); 
} 

가 어떻게이 문제를 해결할 수 있습니까?

+2

JSP의 양식에서 이러한 매개 변수를 어떻게 설정하고 있습니까? 그 코드를 더 보여줄 수 있습니까? – adarshr

답변

46
  1. enctype="multipart/form-data"을 삭제하면 스프링 특수 효과가 올바르게 작동합니다.

    @RequestParam(value="txtEmail", required=false) 
    
  2. 당신도 request 개체의 매개 변수를 얻을 수 있습니다.

    request.getParameter(paramName); 
    
  3. 는 속성의 수가 큰 경우에 form을 사용합니다. 편리 할거야. Tutorial을 시작하십시오.

  4. enctype="multipart/form-data"을 받으려면 다중 부분 분석기를 구성하십시오.

    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
        <property name="maxUploadSize" value="250000"/> 
    </bean> 
    

Spring documentation를 참조하십시오. 다음과 같이 또한 헤더 값을 추가 컨트롤러에서 콘텐츠 형식

<form method="POST" 
    action="http://localhost:8080/cms/customer/create_customer" 
    id="frmRegister" name="frmRegister" 
    enctype="application/x-www-form-urlencoded"> 

을 변경하는 경우

+0

몇 개가 넘는 경우 매개 변수 바인딩에 양식을 사용하는 것이 좋습니다. Spring의'@ RequestParam' 주석은 코드 전체에서'request.getParameter'를하는 것보다 더 잘 읽는 편리한 메커니즘입니다. 그러나'MultipartResolver' 비트는 +1합니다. – adarshr

+0

양식 태그를 사용하는 경우 html 코드에 빈 필드 이름을 포함해도됩니까? – gab06

8

는 또한 작동합니다

@RequestMapping(value = "/create_customer", method = RequestMethod.POST, headers = "Content-Type=application/x-www-form-urlencoded") 
7

을 나는 모든 POST PARAMS를 얻을하려는 경우 I 아래 코드를 사용하고 있습니다.

@RequestMapping(value = "/", method = RequestMethod.POST) 
public ViewForResponseClass update(@RequestBody AClass anObject) { 
    // Source.. 
} 

@RequestBody GET 매개 변수를 읽는 @RequestParam 대신 http 요청을 게시/저장/삭제하기위한 주석.

+0

고마워, 내가 원한거야. !! –

4

당신은 당신이 요청 본문으로 보내해야 매개 변수를 게시하기 위해 방법 = RequestMethod.GET

과 그 자원에 대한 @RequestParam를 사용해야합니다. JSON 또는 다른 데이터 표현과 같은 본문은 구현에 따라 다릅니다 (즉, MediaType을 소비하고 생성 함).

일반적으로 multipart/form-data은 파일을 업로드하는 데 사용됩니다.

관련 문제