2010-09-26 26 views
14

Trong bộ điều khiển, tôi có mã này, bằng cách nào đó, tôi muốn nhận yêu cầu "Tìm kiếm" giá trị Bản đồ. Làm cách nào có thể?Làm cách nào để nhận giá trị yêu cầu trong bộ điều khiển?

@RequestMapping("/search/")  
public Map searchWithSearchTerm(@RequestParam("name") String name) {  
     // more code here  
} 
+0

bạn có thể mở rộng trên trường hợp sử dụng của bạn xin vui lòng? Tôi đang cố gắng tìm ra những gì bạn đang cố gắng đạt được ở đây, vì việc tìm kiếm không có vẻ hữu ích ngoài việc đăng nhập hoặc sử dụng đường dẫn đầy đủ, trong trường hợp đó bạn chỉ có thể lấy đường dẫn từ yêu cầu dưới dạng ankit hướng dẫn – walnutmon

Trả lời

15

Một cách là lấy nó từ đường dẫn servlet.

@RequestMapping("/search/")  
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) {  
String mapping = request.getServletPath(); 
     // more code here  
} 
1
@RequestMapping("foo/bar/blub")  
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) { 
    // delivers the path without context root 
    // mapping = "/foo/bar/blub" 
    String mapping = request.getPathInfo(); 
    // more code here 
} 
17

Nếu bạn muốn mô hình, bạn có thể thử HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE:

@RequestMapping({"/search/{subpath}/other", "/find/other/{subpath}"}) 
public Map searchWithSearchTerm(@PathVariable("subpath") String subpath, 
              @RequestParam("name") String name) { 

    String pattern = (String) request.getAttribute(
           HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); 
    // pattern will be either "/search/{subpath}/other" or 
    // "/find/other/{subpath}", depending on the url requested 
    System.out.println("Pattern matched: "+pattern); 

} 
7

Có một bộ điều khiển như

@Controller 
@RequestMapping(value = "/web/objet") 
public class TestController { 

    @RequestMapping(value = "/save") 
    public String save(...) { 
     .... 
    } 
} 

Bạn không thể có được requestMapping cơ sở điều khiển sử dụng phản ánh

// Controller requestMapping 
String controllerMapping = this.getClass().getAnnotation(RequestMapping.class).value()[0]; 

hoặc phương pháp requestMapping (từ bên trong một phương pháp) với sự phản ánh quá

//Method requestMapping 
String methodMapping = new Object(){}.getClass().getEnclosingMethod().getAnnotation(RequestMapping.class).value()[0]; 

Rõ ràng làm việc với một trong requestMapping giá trị duy nhất.

Hy vọng điều này sẽ hữu ích.

+0

điều này rất hữu ích khi sử dụng một bộ điều khiển cơ sở trừu tượng với logic bên trong cần ánh xạ yêu cầu của các lớp điều khiển kế thừa, cụ thể, điều khiển –

+0

Yêu cầu ánh xạ không? http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html – vzamanillo

0

Đối với mùa xuân 3.1 trở lên, bạn có thể sử dụng ServletUriComponentsBuilder

@RequestMapping("/search/")  
    public ResponseEntity<?> searchWithSearchTerm(@RequestParam("name") String name) { 
     UriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest(); 
     System.out.println(builder.buildAndExpand().getPath()); 
     return new ResponseEntity<String>("OK", HttpStatus.OK); 
    } 
Các vấn đề liên quan