2013-06-15 45 views
6

Nhìn qua nguồn cho các ứng dụng của chúng tôi, tôi đã tìm thấy bộ điều khiển Spring MVC phổ biến hiển thị khóa và giá trị của cấu hình được sao chép và dán nhiều lần. Các định nghĩa lớp là hoàn toàn giống nhau, ngoại trừ giá trị RequestMapping, vì mỗi ứng dụng muốn có trang này có sẵn dưới các URL khác nhau.Yêu cầu ghi đè đè lên bộ điều khiển SpringMVC

Tôi muốn di chuyển bộ điều khiển này vào một thư viện chung và cung cấp giá trị RequestMapping mặc định.

@Controller 
@RequestMapping (value="/property") 
public class CommonPropertyController { 
    .... 
} 

Mỗi ứng dụng sẽ ghi đè giá trị này như thế nào nếu họ muốn sử dụng mẫu url của riêng mình?

Trả lời

11

Nhìn vào mã nguồn tôi có ý tưởng làm thế nào để làm điều đó mà không cần phải quay lại định nghĩa trình xử lý thủ công (trước chú thích) (cũng là cách để thực hiện những gì bạn cần).

Mùa xuân cho phép bạn sử dụng các trình định cấu hình trình giữ chỗ thuộc tính trong các giá trị @RequestMapping. Vì vậy, nó có thể sử dụng thực tế đó và xác định @RequestMapping như:

@Controller 
@RequestMapping("${routing.property.path}") 
public class CommonPropertyController { 
    .... 
} 

Sau đó, bạn có thể dễ dàng xác định PropertySourcesPlaceholderConfigurer với các thuộc tính đúng trong bối cảnh ứng dụng của bạn và bạn tốt để đi.


CẬP NHẬT Bạn cũng có thể chỉ định một giá trị mặc định sử dụng giữ chỗ thuộc tính nếu bạn muốn có bản đồ dự phòng trong trường hợp tài sản không speciefied:

@RequestMapping("${routing.property.path:/property}") 
+0

Wow này là tuyệt vời! – ltfishie

+0

Điều này có thêm lợi ích của việc vô hiệu hóa bộ điều khiển nếu thuộc tính không có mặt. Chính xác những gì tôi đang tìm kiếm. – ltfishie

+0

Tôi không chắc chắn bạn sẽ có thể vô hiệu hóa bộ điều khiển theo cách này. Nó sẽ được ánh xạ tới chính trình giữ chỗ đó hoặc bạn có thể gặp lỗi về thuộc tính chưa được giải quyết ... Btw. Tôi cũng nhận thấy rằng hành vi giữ chỗ được đề cập trong '@ RequestMapping' JavaDoc :) –

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