2013-04-06 38 views
38

Tôi có kịch bản trong đó một url "serachUser" có thể có hai giá trị khác nhau (tham số yêu cầu) userId hoặc UserName.tạo hai phương thức cho cùng một mẫu url với các đối số khác nhau

để cho điều này tôi đã tạo ra hai phương pháp

public String searchUserById(@RequestParam long userID, Model model) 
public ModelAndView searchUserByName(@RequestParam String userName) 

Nhưng tôi đang nhận được bản đồ mơ hồ tìm thấy ngoại lệ. Mùa xuân có bất kỳ cách nào để xử lý tình huống này.

Trả lời

74

Bạn có thể sử dụng tham số params để lọc theo tham số HTTP. Trong trường hợp của bạn, nó sẽ giống như sau:

@RequestMapping(value = "/searchUser", params = "userID") 
public String searchUserById(@RequestParam long userID, Model model) { 
    // ... 
} 

@RequestMapping(value = "/searchUser", params = "userName") 
public ModelAndView searchUserByName(@RequestParam String userName) { 
    // ... 
} 
+0

Cách khác tôi đã xử lý việc này là chấp nhận tham số dưới dạng Chuỗi, sau đó gọi Long.parseLong() trên đó. Nếu nó phân tích cú pháp, thì đó là userId, nếu nó không, giả sử tên người dùng của nó. – CodeChimp

+6

Tôi nghĩ rằng quyết định trên cơ sở ngoại lệ không phải là một ý tưởng tốt ... – Stifler

+4

Trong trường hợp bạn muốn biết nó hoạt động như thế nào khi bạn có nhiều tham số, bạn có thể sử dụng 'params = {" storeId "," containerLabel "}' – cindyxiaoxiaoli

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