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";
}

Jawaban:


436

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

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


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.


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.


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"})

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)

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


-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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.