tạo hai phương thức cho cùng một mẫu url với các đối số khác nhau


87

Tôi gặp trường hợp trong đó một url "serachUser" có thể đi kèm với hai giá trị khác nhau (tham số yêu cầu) userId hoặc UserName.

vì vậy đối với điều này, tôi đã tạo hai phương pháp

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

Nhưng tôi nhận được ngoại lệ được tìm thấy ánh xạ mơ hồ. Xuân có cách nào xử lý tình huống này không.

Câu trả lời:


188

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

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

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

Cách khác mà tôi đã xử lý điều 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ì nó là userId, nếu không, hãy coi nó là tên người dùng.
CodeChimp

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

nếu ánh xạ url và tất cả các tham số khác giống nhau, nó có đưa ra ngoại lệ về thời gian triển khai không?
Janath

Nhưng liệu có thể gán vai trò / chức năng khác nhau cho url này để ủy quyền không?
Kanagavelu Sugumar

2
Liên quan: Swagger có thể không hỗ trợ đầy đủ điều này. Tôi đã tìm thấy sự cố này github.com/springfox/springfox/issues/1828 . Tôi sử dụng Spring Fox 2.7.0 và giao diện người dùng Swagger chỉ hiển thị 1 phương thức thay vì 2. Rõ ràng điều này có thể được khắc phục bằng enableUrlTemplating(true)cách sử dụng giao diện người dùng Swagger thử nghiệm: springfox.github.io/springfox/docs/current/…
Stephanie

0

Bất kỳ cách nào trong trường hợp yêu cầu param null đều được cho phép nếu bạn không chuyển bất kỳ giá trị nào thì nó sẽ là null sau đó bạn có thể viết coad của mình như:

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.