Làm cách nào để sử dụng nhiều chú thích @RequestMapping vào mùa xuân?


247

Có thể sử dụng nhiều @RequestMappingchú thích trên một phương thức?

Giống :

@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
  return "welcome";
}

Câu trả lời:


436

@RequestMappingcó một String[]tham số giá trị, vì vậy bạn sẽ có thể chỉ định nhiều giá trị như thế này:

@RequestMapping(value={"", "/", "welcome"})


2
Điều đó nói rằng, tôi gặp khó khăn khi để các giá trị "" hoặc "/" thực sự hoạt động trong ứng dụng của mình. Họ có làm việc cho bạn không?
Ed Brannin

Có cách nào để liên kết các chế độ xem thành công và dạng xem khác nhau với mỗi URL yêu cầu bằng nhiều chú thích không?
k-den

@EdBrannin Tôi cần nhiều thứ để sử dụng, tùy chỉnh, tiêu đề, tiêu thụ, thông số, v.v.
deFreitas

Ngoài ra tôi muốn biết, làm thế nào để tôi biết yêu cầu nào đã được gọi. nó / hoặc được chào đón?
Siddharth

1
@Siddharth 1. Bạn có thể có thể thêm và kiểm tra một tham số kiểu httpRequest. 2. Nếu bạn thực sự quan tâm ánh xạ nào được gọi, có thể không sử dụng kỹ thuật này. ;)
Ed Brannin

24

Từ thử nghiệm của tôi (mùa xuân 3.0.5), @RequestMapping(value={"", "/"}) - chỉ "/"hoạt động, ""không. Tuy nhiên tôi phát hiện ra điều này hoạt động : @RequestMapping(value={"/", " * "}), " * "phù hợp với bất cứ điều gì, vì vậy nó sẽ là trình xử lý mặc định trong trường hợp không có người khác.


13

Không cần. Chú thích RequestMapping hỗ trợ ký tự đại diện và đường dẫn kiểu ant. Cũng có vẻ như bạn chỉ muốn một chế độ xem mặc định, vì vậy bạn có thể đặt

<mvc:view-controller path="/" view-name="welcome"/>

trong tập tin cấu hình của bạn. Điều đó sẽ chuyển tiếp tất cả các yêu cầu đến Root để xem.


Có phải có một cái gì đó giữa hai dòng? Tôi đang sử dụng FreeMarkerViewResolver - vì vậy tôi sẽ phải đi theo cách này ... Chà, tôi đoán tôi có thể tạo nhiều ViewResolver.
wuntee

2
Nó không cung cấp tính linh hoạt mà nhiều chú thích RequestMapping sẽ cung cấp. Ví dụ: nếu tôi muốn có một phương thức hỗ trợ giá trị "/ a" bằng POST hoặc giá trị "/ b" bằng GET. Tất nhiên cách giải quyết khá dễ dàng (tái cấu trúc chức năng trong phương thức thứ ba), nhưng chỉ cần nói rằng nó sẽ hữu ích.
simon

1

Cách ngắn nhất là: @RequestMapping({"", "/", "welcome"})

Mặc dù bạn cũng có thể làm:

  • @RequestMapping(value={"", "/", "welcome"})
  • @RequestMapping(path={"", "/", "welcome"})

1

Ngay bây giờ với việc sử dụng Spring-Boot 2.0.4 - {} sẽ không hoạt động.

@RequestMapping

vẫn có String [] làm tham số giá trị, vì vậy khai báo trông như thế này:

 @RequestMapping(value=["/","/index","/login","/home"], method = RequestMethod.GET)

** Cập nhật - Hoạt động với Spring-Boot 2.2 **

 @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)

Dấu ngoặc vuông không hợp lệ. Cú pháp hợp lệ cho một mảng bằng chữ là sử dụng dấu ngoặc {}
luis.espinal

@ luis.espinal Square ngoặc hoạt động với phiên bản Spring-Boot 2.0.4. Tôi sẽ cập nhật bài viết của tôi.
Falcon

0

Những điều sau đây cũng được chấp nhận:

@GetMapping(path = { "/{pathVariable1}/{pathVariable1}/somePath", 
                     "/fixedPath/{some-name}/{some-id}/fixed" }, 
            produces = "application/json")

Tương tự có thể được áp dụng cho @RequestMappinglà tốt


-2

Tốt hơn là sử dụng chú thích PathVariable nếu bạn vẫn muốn lấy uri được gọi.

@PostMapping("/pub/{action:a|b|c}")
public JSONObject handlexxx(@PathVariable String action, @RequestBody String reqStr){
...
}

hoặc phân tích nó từ đối tượng yêu cầu.

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.