Як використовувати кілька анотацій @RequestMapping навесні?


247

Чи можливо використовувати кілька @RequestMappingанотацій за методом?

Подібно до :

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

Відповіді:


436

@RequestMappingмає String[]параметр значення, тож ви маєте змогу вказати кілька таких значень:

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


2
З цього приводу у мене виникають проблеми з отриманням значень "" або "/", щоб вони фактично працювали у моїй програмі. Вони працюють на вас?
Ед Браннін

Чи є спосіб пов’язати різні погляди успіху та сформувати представлення даних щодо кожної URL-адреси запиту, використовуючи кілька приміток?
k-den

@EdBrannin Мені потрібно багато, щоб використовувати, користувацькі, заголовки, споживання,
парами

Також я хотів би знати, як я можу дізнатись, яка карта викликалася. це / чи ласкаво просимо?
Сіддхарт

1
@Siddharth 1. Можливо, ви зможете додати та перевірити параметр типу HttpRequest. 2. Якщо вам дійсно все одно, яке картування було названо, можливо, не використовуйте цю техніку. ;)
Ед Браннін

24

З мого тесту (весна 3.0.5), @RequestMapping(value={"", "/"}) - "/"працює лише , ""ні. Тим НЕ менше я дізнався, що це працює: @RequestMapping(value={"/", " * "}), на " * "що - небудь матчі, так що це буде за замовчуванням обробник в разі будь - яких інших.


13

Не потрібно. Анотація RequestMapping підтримує символи підстановки та мурашки. Також виглядає так, що ви просто хочете переглянути перегляд за замовчуванням, щоб ви могли поставити

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

у вашому конфігураційному файлі. Це перенаправить усі запити Root до вітання.


Чи має бути щось між цими двома рядками? Я використовую FreeMarkerViewResolver - тому мені доведеться йти цим шляхом ... Ну, мабуть, я міг би просто створити кілька ViewResolver.
wuntee

2
Це не забезпечує гнучкість, яку надавали б декілька анотацій RequestMapping. Наприклад, якщо я хочу мати один метод, підтримує або значення "/ a" з POST, або значення "/ b" з GET. Звичайно, вирішення цього питання досить просте (відновлення функціональності в третьому методі), але просто сказати, що це буде корисно.
simon

1

Найкоротший шлях: @RequestMapping({"", "/", "welcome"})

Хоча ви також можете:

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

1

Зараз із використанням Spring-Boot 2.0.4 - {} не вийде.

@RequestMapping

як параметр значення все ще містить String [], тому декларація виглядає приблизно так:

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

** Оновлення - працює з Spring-Boot 2.2 **

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

Квадратні дужки недійсні.
Дійсним

@ luis.espinal квадратні дужки працювали з версією 2.0.4 Spring-Boot. Я оновлю свою посаду.
Сокіл

0

Прийнятне також:

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

Те ж саме може бути застосовано до @RequestMappingа


-2

Краще використовувати анотацію PathVariable, якщо ви все ще хочете отримати ури, яку викликали.

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

або проаналізувати його з об'єкта запиту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.