Bagaimana cara menggunakan anotasi @RequestMapping di musim semi?

247

Apakah mungkin menggunakan banyak @RequestMappinganotasi atas suatu metode?

Suka :

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

Jawaban:

436

@RequestMappingmemiliki String[]parameter nilai, jadi Anda harus dapat menentukan beberapa nilai seperti ini:

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

Ed Brannin
sumber
2
Karena itu, saya mengalami masalah dalam mendapatkan nilai "" atau "/" untuk benar-benar berfungsi di aplikasi saya. Apakah mereka bekerja untuk Anda?
Ed Brannin
Apakah ada cara untuk mengaitkan tampilan keberhasilan yang berbeda dan membentuk tampilan dengan setiap URL permintaan menggunakan beberapa anotasi?
k-den
@ EdBrannin Saya perlu banyak menggunakan, custom, header, konsumsi, params, dll
deFreitas
Saya juga ingin tahu, bagaimana saya tahu pemetaan permintaan yang telah dipanggil. apakah ini selamat datang?
Siddharth
1
@Siddharth 1. Anda mungkin dapat menambahkan & memeriksa parameter tipe HttpRequest. 2. Jika Anda benar-benar peduli pemetaan mana yang dipanggil, mungkin jangan gunakan teknik ini. ;)
Ed Brannin
24

Dari pengujian saya (musim semi 3.0.5), @RequestMapping(value={"", "/"}) - hanya "/"bekerja, ""tidak. Namun saya menemukan karya-karya ini: @RequestMapping(value={"/", " * "}), yang " * "pertandingan apa pun, sehingga akan menjadi penangan default dalam kasus tidak ada orang lain.

Alan Zhong
sumber
13

Tidak perlu. Anotasi RequestMapping mendukung wildcard dan jalur semut. Sepertinya Anda hanya menginginkan tampilan default, jadi Anda bisa meletakkannya

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

dalam file konfigurasi Anda. Itu akan meneruskan semua permintaan ke Root ke tampilan selamat datang.

Robby Pond
sumber
Apakah seharusnya ada sesuatu di antara dua garis itu? Saya menggunakan FreeMarkerViewResolver - jadi saya harus pergi dengan cara ini ... Yah, saya kira saya bisa membuat beberapa ViewResolver.
Wuntee
2
Itu tidak memberikan fleksibilitas yang disediakan oleh beberapa anotasi RequestMapping. Sebagai contoh, jika saya ingin memiliki satu metode mendukung nilai "/ a" dengan POST atau nilai "/ b" dengan GET. Tentu saja solusinya cukup mudah (refactoring fungsi dalam metode ketiga), tetapi hanya mengatakan bahwa itu akan bermanfaat.
simon
1

Cara terpendek adalah: @RequestMapping({"", "/", "welcome"})

Meskipun bisa juga Anda lakukan:

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

Saat ini dengan menggunakan Spring-Boot 2.0.4 - {} tidak akan berfungsi.

@RequestMapping

masih memiliki String [] sebagai parameter nilai, jadi deklarasi terlihat seperti ini:

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

** Pembaruan - Bekerja Dengan Spring-Boot 2.2 **

 @RequestMapping(value={"/","/index","/login","/home"}, method = RequestMethod.GET)
Elang
sumber
Kurung kotak tidak valid. Sintaks yang valid untuk array literal adalah dengan menggunakan kurung kurawal {}
luis.espinal
@ luis.espinal Kurung kotak bekerja dengan versi 2.0.4 Spring-Boot. Saya akan memperbarui posting saya.
Falcon
0

Berikut ini juga dapat diterima:

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

Hal yang sama dapat diterapkan @RequestMappingjuga

Pritam Banerjee
sumber
-2

Lebih baik menggunakan anotasi PathVariable jika Anda masih ingin mendapatkan uri yang dipanggil.

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

atau parsing dari objek permintaan.

CQLI
sumber