Получить запрашиваемое значение (URL) при использовании аннотаций @RequestMapping - PullRequest
13 голосов
/ 29 сентября 2011

Когда я отображаю несколько значений в @RequestMapping (например, Несколько аннотаций Spring @RequestMapping ), могу ли я получить запрошенное значение (URL)?

Например:

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET)
public String getCenter(Model model) throws Exception {     
    String requestedValue = getRequestedValue();  // I want this.

    // I want to do something like this with requested value.
    String result; 
    if (requestedValue.equals("center")
        result = "center";
    else if (requestedValue.equals("left")
        result = "left";
    return result;
}

Ответы [ 6 ]

17 голосов
/ 29 сентября 2011

Вы можете иметь сам запрос (HttpServletRequest) в качестве параметра метода-обработчика. Таким образом, вы можете проверить URL запроса, чтобы получить «значение».

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET)
public String getCenter(Model model, HttpServletRequest request) throws Exception {             
   String whatYouCallValue = request.getServletPath(); 
   ....

Кстати: когда я понимаю вас, вы хотите иметь разные URL, а не разные значения.

6 голосов
/ 20 января 2014

В Spring 3.1.0 вы можете использовать Шаблоны шаблонов URI с регулярными выражениями .

@RequestMapping(value={"/{path:[a-z-]+}"}, method=RequestMethod.GET)
public String getCenter(@PathVariable String path) throws Exception {             
    // "path" is what I want
}
1 голос
/ 28 ноября 2017

С весны 3.1.0 вы можете использовать ServletUriComponentsBuilder

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET)
    public String getCenter(Model model) throws Exception {     
        UriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest();
        String requestedValue = builder.buildAndExpand().getPath();  // I want this.
        System.out.println(requestedValue);
        // I want to do something like this with requested value.
        String result="fail"; 
        if (requestedValue.equals("center"))
            result = "center";
        else if (requestedValue.equals("left"))
            result = "left";
        return result;
    }
1 голос
/ 29 сентября 2011

Использовать аннотацию RequestParam. Вы также можете добавить параметр типа HttpServletRequest в свой метод и затем получить из него параметры.

0 голосов
/ 17 мая 2017

Следующее регулярное выражение сделает ваш метод выполненным только для URL /center и /left.И вы можете получить значение с помощью @PathVariable аннотации.

@GetMapping("/{path:^center$|^left$}")
public ResponseEntity<?> whatIsThePath(@PathVariable String path){
    // path is either "center" or "left"
}
0 голосов
/ 11 декабря 2016

Дополнение к лучшему ответу @Hugh_Lee: Этот метод будет работать для всех не отображенных запросов.Если вы хотите использовать этот метод только для двух (или нескольких) случаев, например, "/ center" и "/ left", вы можете сделать следующее.Переименуйте «center» в «positionCenter», «left» в «positionLeft» (или добавьте другое общее слово).Таким образом, код будет выглядеть так:

@RequestMapping(value={"/{path:position+[A-Za-z-]+}"}, method=RequestMethod.GET)
public String getCenter(@PathVariable String path) throws Exception {             
    // "path" is what I want
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...