Spring mvc @PathVariable

Можете ли вы дать мне краткое объяснение и образец использования @PathVariable в spring mvc? Укажите, как вы вводите URL-адрес? Я пытаюсь получить правильный URL-адрес, чтобы показать страницу jsp. Спасибо.

Ответ 1

Предположим, вы хотите написать url для получения некоторого заказа, вы можете сказать

www.mydomain.com/order/123

где 123 - orderId.

Итак, теперь URL-адрес, который вы будете использовать в контроллере spring mvc, будет выглядеть как

/order/{orderId}

Теперь идентификатор заказа может быть объявлен переменной пути

@RequestMapping(value = " /order/{orderId}", method=RequestMethod.GET)
public String getOrder(@PathVariable String orderId){
//fetch order
}

если вы используете URL-адрес www.mydomain.com/order/123, тогда переменная orderId будет заполнена значением 123 с помощью spring

Также обратите внимание, что PathVariable отличается от requestParam, поскольку pathVariable является частью URL. Тот же url с использованием параметра запроса будет выглядеть как www.mydomain.com/order?orderId=123

API DOC
Spring Официальная ссылка

Ответ 2

Посмотрите на приведенный ниже фрагмент кода.

@RequestMapping(value="/Add/{type}")
public ModelAndView addForm(@PathVariable String type ){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("addContent");
    modelAndView.addObject("typelist",contentPropertyDAO.getType() );
    modelAndView.addObject("property",contentPropertyDAO.get(type,0) );
    return modelAndView;
}

Надеюсь, это поможет в создании вашего кода.

Ответ 3

Если у вас есть URL-адрес с переменными пути, например, www.myexampl.com/item/12/update, где 12 - это идентификатор, а create - это переменная, которую вы хотите использовать для указания вашего исполнения для использования в одной форме обновление и создание, вы делаете это в своем контроллере.

   @RequestMapping(value = "/item/{id}/{method}" , RequestMethod.GET)
    public String getForm(@PathVariable("id") String itemId ,  @PathVariable("method") String methodCall , Model model){
  if(methodCall.equals("create")){
    //logic
}
 if(methodCall.equals("update")){
//logic
}

return "path to your form";
}

Ответ 4

@PathVariable используется для получения значения из URL

например: чтобы получить вопрос

www.stackoverflow.com/questions/19803731

Здесь некоторый id вопроса передается в качестве параметра в URL

Теперь для получения этого значения в controller все, что вам нужно сделать, это просто передать @PathVariable в параметре метода

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}

Ответ 5

Аннотация, которая указывает, что параметр метода должен быть связан с переменной шаблона URI. Поддерживается для аннотированных методов-обработчиков RequestMapping.

@RequestMapping(value = "/download/{documentId}", method = RequestMethod.GET)
public ModelAndView download(@PathVariable int documentId) {
    ModelAndView mav = new ModelAndView();
    Document document =  documentService.fileDownload(documentId);

    mav.addObject("downloadDocument", document);
    mav.setViewName("download");

    return mav;
}

Ответ 6

Предположим, вы набрали URL-адрес как www.example.com/test/111. Теперь вам нужно получить значение 111 (которое является динамическим) для вашего метода контроллера. В то время, когда вы будете использовать @PathVariable следующим образом:

@RequestMapping(value = " /test/{testvalue}", method=RequestMethod.GET)
public void test(@PathVariable String testvalue){
//you can use test value here
}

SO, значение переменной извлекается из URL

Ответ 7

С помощью Spring 4 вы можете использовать более удобную аннотацию @GetMapping.  @GetMapping - это составленная аннотация, которая действует как ярлык для @RequestMapping (method = RequestMethod.GET)

@GetMapping ( "/запрос/{ID}" )   public String getRequest (@PathVariable String id) {

Ответ 8

Это одна из аннотаций, используемых для отображения/обработки динамических URI. Вы даже можете указать регулярное выражение для динамического параметра URI, чтобы принимать только определенный тип ввода.

Например, если URL-адрес для получения книги с использованием уникального номера будет:

URL:http://localhost:8080/book/9783827319333

Число, обозначенное в последнем URL-адресе, можно получить с помощью @PathVariable, как показано ниже:

@RequestMapping(value="/book/{ISBN}", method= RequestMethod.GET)

public String showBookDetails(@PathVariable("ISBN") String id,

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

Короче говоря, это просто еще одно извлечение данных из HTTP-запросов в Spring.

Ответ 9

посмотрите ниже фрагмент кода.

@RequestMapping(value = "edit.htm", method = RequestMethod.GET) 
    public ModelAndView edit(@RequestParam("id") String id) throws Exception {
        ModelMap modelMap = new ModelMap();
        modelMap.addAttribute("user", userinfoDao.findById(id));
        return new ModelAndView("edit", modelMap);      
    }

Если вы хотите, чтобы весь проект увидел, как он работает, загрузите его снизу ссылку: -

UserInfo Project на GitLab