2013-07-31 20 views
34

Tôi đang sử dụng mvc mùa xuân. Và tôi không thể lấy param từ url khi method = post. Nhưng khi tôi thay đổi phương pháp để GET, vì vậy tôi có thể nhận được tất cả các param.làm thế nào để có được param trong phương pháp bài mùa xuân mvc?

Đây là hình thức của tôi:

<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> 

Đây là bộ điều khiển của tôi:

@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(); 
} 

Làm thế nào tôi có thể giải quyết này?

+2

Bạn đặt các thông số đó trong biểu mẫu trong JSP của bạn như thế nào? Bạn có thể hiển thị thêm một số mã đó không? – adarshr

Trả lời

46
  1. Chú thích mùa xuân sẽ hoạt động tốt nếu bạn xóa enctype="multipart/form-data".

    @RequestParam(value="txtEmail", required=false) 
    
  2. Bạn thậm chí có thể nhận được thông số từ đối tượng request.

    request.getParameter(paramName); 
    
  3. Sử dụng số form trong trường hợp số thuộc tính lớn. Nó sẽ thuận tiện. Tutorial để giúp bạn bắt đầu.

  4. Định cấu hình trình phân giải nhiều phần nếu bạn muốn nhận enctype="multipart/form-data".

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

Tham khảo các Spring documentation.

+0

Tôi khuyên bạn nên sử dụng một biểu mẫu để ràng buộc các tham số nếu có nhiều hơn một vài trong số chúng. Chú thích '@ RequestParam' của Spring là một cơ chế thuận tiện mà chắc chắn đọc tốt hơn làm' request.getParameter' trong suốt mã. Nhưng 1 cho bit 'MultipartResolver'. – adarshr

+0

Trong trường hợp sử dụng thẻ biểu mẫu, không quan trọng để có tên các trường bean trong mã html? – gab06

8

Nó cũng làm việc nếu bạn thay đổi kiểu nội dung

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

Trong bộ điều khiển cũng thêm giá trị tiêu đề như sau:

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

Khi tôi muốn có được tất cả các POST params tôi đang sử dụng mã bên dưới,

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

Tôi đang sử dụng @RequestBody chú thích cho các yêu cầu đăng/đặt/xóa http thay vì @RequestParam đọc thông số GET.

+0

Cảm ơn, Đây là điều tôi muốn ... !! –

4

Bạn nên sử dụng @RequestParam trên những nguồn lực với phương pháp = RequestMethod.GET

Để gửi các thông số, bạn phải gửi chúng dưới dạng cơ thể theo yêu cầu. Một cơ thể như JSON hoặc một biểu diễn dữ liệu khác sẽ tùy thuộc vào việc triển khai của bạn (ý tôi là, tiêu thụ và sản xuất MediaType).

Thông thường, multipart/form-data được sử dụng để tải tệp lên.