2012-01-25 36 views
8

Tôi có bộ điều khiển với ánh xạ yêu cầu là @RequestMapping("/**") Điều đó có nghĩa là gì?@RequestMapping chú thích trong Spring MVC

Nếu tôi muốn loại trừ mẫu url nhất định khỏi ánh xạ ở trên, tôi sẽ làm như thế nào?

Ai đó có thể làm sáng tỏ một số ánh sáng trên đó?

+0

Cũng xin soi sáng cho tôi về cách mẫu url làm việc với @RequestMapping. Cảm ơn. –

Trả lời

7

URL của bạn sẽ chặn tất cả các yêu cầu khớp với '/ **'. Tùy thuộc vào nơi bạn đang xác định điều này tôi không chắc chắn lý do tại sao bạn sẽ muốn làm điều này. Ở cấp độ lớp, điều này sẽ xác định đường dẫn cơ sở trong khi ở cấp phương thức, nó sẽ được tinh chỉnh thành hàm cụ thể.

Nếu bạn muốn loại trừ một mẫu bạn có thể xác định một điều khiển được đặt ở mức ưu tiên cao với bộ điều khiển nêu rõ '/ **'

Dưới đây là 2 tài liệu tham khảo tốt từ nguồn suối:

  1. http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

  2. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html

+1

Sự khác nhau giữa/** và/* là gì. Tôi nghĩ/* cũng sẽ bao gồm/** Tôi có đúng không? –

+1

Điều ngược lại. Google "kiến thức kiểu mẫu" hoặc một cái gì đó tương tự ... –

14

Tôi đã có thể đạt được "loại trừ url" hoặc "không khớp với url" thông qua việc sử dụng cấu trúc "lookahead" của Regex.

Tôi muốn trình xử lý của mình phân phát mọi thứ ngoài tài nguyên tĩnh, tức là CSS/Hình ảnh/JS và các trang lỗi.

Để ngăn chặn điều đó handeling của trang lỗi tức là resourceNotFound bạn sẽ cần phải

  1. Sửa web.xml/web-app/lỗi-page tiền tố url lỗi với/lỗi/
  2. Chỉnh sửa WEB-INF/spring/webmvc-config.xml/beans/mvc: chế độ xem-bộ điều khiển/@ path handel ánh xạ mới của bạn
  3. Chỉnh sửa WEB-INF/spring/webmvc-config.xml/beans/bean [@ class = ** SimpleMappingExceptionResolver] để ánh xạ tất cả ngoại lệ thành lỗi/...

Trong điều khiển của bạn sử dụng bên dưới

@Controller 
@RequestMapping(value = { "/" }) 
public class CmsFrontendController { 

    @RequestMapping(value = { "/" }, headers = "Accept=text/html") 
    public String index(Model ui) { 
     return addMenu(ui, "/"); 
    } 

    @RequestMapping(value = { "{path:(?!resources|error).*$}", "{path:(?!resources|error).*$}/**" }, headers = "Accept=text/html") 
    public String index(Model ui, @PathVariable(value = "path")String path) { 
     try { 
      path = (String) request.getAttribute(
        HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
      return addMenu(ui, path); 
     } catch (Exception e) { 
      log.error("Failed to render the page. {}", StackTraceUtil.getStackTrace(e)); 
      return "error/general"; 
     } 
    } 
} 
+1

Có PHẢI là một giải pháp bền vững hơn so với điều này ...? Đàn ông. – roufamatic

+0

Tuyệt vời, cảm ơn rất nhiều @concept! – Gilead

+0

Rất cám ơn @conept !!! –

Các vấn đề liên quan