2013-03-13 9 views
9

Tôi có thể làm như sau trong Spring MVCGeneric Spring MVC Controller với Inheritance

Giả sử tôi có cơ sở GenericController như sau với một bản đồ theo yêu cầu "/ danh sách"

@Controller 
public class GenericController<T>{ 

    @RequestMapping(method = RequestMethod.GET, value = "/list") 
    public @ResponseBody List<T> getMyPage(){ 
     // returns list of T 
    } 

} 

Dưới đây là hai bộ điều khiển của tôi

@Controller(value = "/page1") 
public class Page1Controller extends GenericController<Page1>{ 

} 

@Controller(value = "/page2") 
public class Page2Controller extends GenericController<Page2>{ 

} 

Bây giờ tôi sẽ có thể truy cập url "/ page1/list" và "/ page2/list" trong đó đầu tiên chuyển đến Page1Controller và thứ hai đi tới Page2Controller.

+3

AFAIK, chú thích không được kế thừa, do đó, chú thích này có thể không hoạt động như mong đợi –

Trả lời

13

Điều đó là không thể và đã bị từ chối, xem SPR-10089. Tôi nghĩ rằng điều này sẽ hơi khó hiểu và ngoài ra, rất khó có khả năng rằng phương pháp đó hoạt động chính xác chính xác là ngoài lập bản đồ khác. Nhưng bạn có thể sử dụng thay vì đoàn:

public class BaseController<T> { 
    public List<T> getPageList(){ 
     // returns list of T 
    } 
} 

@Controller(value = "/page1") 
public class Page1Controller extends BaseController<Page1>{ 
    @RequestMapping(method = RequestMethod.GET, value = "/list") 
    public @ResponseBody List<Page1> getMyPage() { 
     return super.getPageList(); 
    }  
} 

@Controller(value = "/page2") 
public class Page2Controller extends BaseController<Page2>{ 
    @RequestMapping(method = RequestMethod.GET, value = "/list") 
    public @ResponseBody List<Page2> getMyPage() { 
     return super.getPageList(); 
    } 
} 
+1

+1 cho liên kết Spring JIRA. –

+0

không chắc chắn điều này là chính xác, –

+0

Tôi nghĩ rằng SPR-10089 không phù hợp với ví dụ này, mà nên khái niệm làm việc. SPR-10089 sẽ không "chồng" ánh xạ url trên @RequestMapping ở cấp lớp. xem http://stackoverflow.com/questions/5268643/spring-mvc-requestmapping-inheritance này để có giải thích đầy đủ. –

3

Đối với những người tìm kiếm một cái gì đó tương tự với Spring Framework 4.x, hệ thống phân cấp lớp được cung cấp bởi các OP là có thể. Một ứng dụng mẫu có sẵn trên Github. Nó cho phép người dùng xem danh sách sách hoặc danh sách tạp chí dưới dạng JSON.

+0

Tại sao bạn nói rằng loại siêu không có chú thích '@ RequestMapping'? Siêu kiểu 'BaseController' không có chú thích trên phương thức' list', là đoạn mã đầu tiên trong câu hỏi hiển thị. Có thể bạn có một yêu cầu khác nhau và bị lẫn lộn? – manish

+0

manish, bạn nói đúng, xin lỗi vì bình luận sai - Tôi sẽ xóa nó và upvote ;-) Chỉnh sửa: Giải pháp hoạt động tốt cho tôi, vì vậy IMO đây là câu trả lời đúng. –

+0

@MichaelWyraz, cảm ơn bạn đã xác nhận. :) – manish