2010-07-25 25 views
8

Tôi không thể tìm ra giải pháp cho điều này và điều đó khiến tôi phát điên. Tôi có @Controller ánh xạ mà phản ứng với một số phương pháp bằng cách sử dụng @ RequestMapping. Tôi muốn gắn thẻ một trong những phương thức đó làm mặc định khi không có gì cụ thể hơn được chỉ định. Ví dụ:Cách tạo phương thức mặc định trong SpringMVC bằng chú thích?

@Controller 
@RequestMapping("/user/*") 
public class UserController { 

    @RequestMapping("login") 
    public String login(MapModel model) {} 

    @RequestMapping("logout") 
    public String logout(MapModel model) {} 

    @RequestMapping("authenticate") 
    public String authenticate(MapModel model) {} 
} 

Vì vậy, nếu người dùng truy cập/người dùng, sau đó nó chuyển đến một của những phương pháp này. Tuy nhiên, tôi không thấy bất kỳ điều gì trên @RequestMapping cho phép tôi chỉ định một trong các phương thức này làm trình xử lý mặc định. Tôi cũng không thấy bất kỳ chú thích nào khác có thể được sử dụng trên lớp để thực hiện việc này. Tôi bắt đầu nghi ngờ nó không tồn tại.

Tôi đang sử dụng Spring 2.5.6. Điều này có được giải quyết trong 3.0.0 không? Tôi có thể chỉ cần hack Spring để làm cho nó hoạt động bởi vì nó rất khó chịu, điều này không đơn giản hơn.

Cảm ơn trước.

+0

+1 Cảm ơn câu hỏi tuyệt vời! –

Trả lời

12

Hãy xem câu trả lời này:

Spring MVC and annotated controllers issue

gì nếu bạn chú thích một phương pháp với:

@RequestMapping(method = RequestMethod.GET) 

Bạn có thể thấy một ví dụ ở đây:

Spring 3.0 MVC + Hibernate : Simplified with Annotations – Tutorial

Hành vi tương tự có thể thấy n ở đây:

Spring Framework 3.0 MVC by Aaron Schram (xem trang 21)

+3

Bằng cách chú thích với @RequestMapping (method = RequestMethod.GET) trên một phương thức mà nó đã làm việc. Cảm ơn. Tuy nhiên, liên kết đầu tiên không phải là vấn đề tương tự và không áp dụng được. Các liên kết khác hữu ích hơn. – chubbsondubs

5

Câu trả lời ngắn: Tôi không biết làm thế nào để chỉ cần xác định một phương pháp như mặc định với một thẻ đơn giản.

Nhưng có này ...

Tôi không biết trong đó phiên bản của mùa xuân này được thực hiện, nhưng bạn có thể cung cấp nhiều value s để @RequestMapping trong 3.1.2. Vì vậy, tôi làm điều này:

@Controller 
@RequestMapping("/user") 
public class UserController { 

    @RequestMapping(value = {"", "/", "/list"}, method = RequestMethod.GET) 
    public String listUsers(ModelMap model) { } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public ModelAndView add(HttpServletRequest request, ModelMap model) { } 

} 

Các URL sau sau đó bản đồ để listUsers():

0

tôi sẽ tạo ra một phương pháp mặc định không có giá trị RequestMapping của trong đó. Vui lòng xem phương thức defaultCall() bên dưới. Sau đó bạn có thể chỉ cần gọi cho họ với URL: [yourhostname]/user

@Controller 
@RequestMapping("/user") 
public class UserController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String defaultCall(MapModel model) { 
     //Call the default method directly, or use the 'forward' String. Example: 
     return authenticate(model); 
    } 

    @RequestMapping("login") 
    public String login(MapModel model) {} 

    @RequestMapping("logout") 
    public String logout(MapModel model) {} 

    @RequestMapping("authenticate") 
    public String authenticate(MapModel model) {} 
} 

Ref: Spring Framework Request Mapping

0

Đơn giản chỉ cần sử dụng @RequestMapping("**") trên phương pháp mặc định của bạn nên làm việc. Bất kỳ ánh xạ cụ thể nào khác vẫn nên nhận các yêu cầu của họ. Tôi sử dụng phương pháp này để thiết lập các phương thức mặc định đôi khi.Hiện đang sử dụng Spring v4.3.8.RELEASE.

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