2012-02-09 57 views
9

Trong Spring MVC 3, tôi muốn xử lý cùng một url với hai lớp điều khiển khác nhau - tùy thuộc vào giá trị của tham số url. @RequestMapping chú thích thậm chí có lĩnh vực như: params, và tôi nghĩ sau đây sẽ có hai bản đồ khác nhau (tôi sử dụng bản đồ trên mức lớp):Cách chia ánh xạ yêu cầu Spring MVC theo giá trị tham số

@RequestMapping(value = "/myurl", params = "name=val1") 

@RequestMapping(value = "/myurl", params = "name=val2") 

nhưng nó không phải . Mùa xuân ném ngoại lệ cho trường hợp thứ hai bộ điều khiển cho /myurl đã được ánh xạ (theo trường hợp đầu tiên).

Có giải pháp chính xác nào để phân tách ánh xạ yêu cầu theo tham số không? Có thể mở rộng @RequestMapping hoặc sử dụng proxy làm bộ điều khiển và gọi các bộ điều khiển khác nhau tùy thuộc vào tham số ... Bất kỳ suy nghĩ nào?

CẬP NHẬT này hoạt động nhưng chỉ trên mức độ phương pháp, không phải trên mức lớp ... di chúc này:

@Controller 
@RequestMapping(value = "/myurl") 
public class Class123 { 

    @RequestMapping(value = {"edit.htm"}, params = "src=1") 
    public String open1(Map<String, Object> map) throws Exception {....} 

    @RequestMapping(value = {"edit.htm"}, params = "src=2") 
    public String open2(Map<String, Object> map) throws Exception {....} 
} 

này sẽ không:

@Controller 
@RequestMapping(value = "/myurl", params = "src=1") 
public class Class123_1 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 


@Controller 
@RequestMapping(value = "/myurl", params = "src=2") 
public class Class123_2 { 

    @RequestMapping(value = {"edit.htm"}) 
    public String open(Map<String, Object> map) throws Exception {....} 
} 

Và tôi muốn để phân chia logic trong các lớp khác nhau.

+1

Điều đó sẽ hiệu quả. Tôi đã sử dụng nó, nó hoạt động. Một cái gì đó khác đang xảy ra mà bạn đã không cho chúng ta thấy. Có lẽ một số bộ điều khiển khác đã ánh xạ URL đó. – skaffman

+0

+1 nó hoạt động thêm thông tin? –

+1

Hmm, có thể điều này chỉ hoạt động đối với các phương thức trong cùng một lớp. Tuy nhiên, không chắc đó có phải là lỗi hay không, mặc dù tài liệu không đề cập đến nó. Có lẽ bạn có thể giữ các phương thức trong một lớp, nhưng sau đó ủy quyền cho một lớp khác để giữ cho các triển khai tách biệt? – skaffman

Trả lời

1

Có vẻ như sự khác biệt giữa việc sử dụng RequestMappingHandlerMapping (mới trong Spring 3.1) so với DefaultAnnotationHandlerMapping (lớp được thay thế bằng RequestMappingHandlerMapping).

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