Весняний mvc @PathVariable


125

Чи можете ви дати мені коротке пояснення та зразок використання @PathVariableу весняному mvc? Вкажіть, як вводити URL-адресу?
Я намагаюся отримати потрібний URL для показу сторінки jsp. Дякую.


1
показ jsp через весняний контролер mvc здійснюється через view or say ModelAndView. @PathVariableанотація, яка використовується для отримання назви змінної та її значення на кінці контролера. Наприклад, www.abcd.com/api/value=34455&anotherValue=skjdfjhks тут значення та elseValue є змінною, яку можна отримати за допомогою int значення @PathVariable ("value") та @PathVariable ("AnotherValue") String anotherValue
agpt

Відповіді:


221

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

www.mydomain.com/order/123

де 123 - порядок ід.

Отже, тепер виглядатиме URL-адреса, яку ви використовуєте у весняному контролері 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

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

Веб- офіційний довідник API DOC


у використанні pathVariable. мені потрібно щось імпортувати? чи будь-яка залежність? Дякую.
Джеймс

вам просто потрібно імпортувати анотацію PathVariable import org.springframework.web.bind.annotation.PathVariable
кодер

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


Я хочу мати www.mydomain.com/order/abc.def, зараз у контролері я отримую лише abc
prem30488

10

Перегляньте фрагмент коду нижче.

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

Сподіваємось, це допоможе у створенні вашого коду.


я не знайомий з моделлю та видом. хе-хе. спасибі btw .. з нетерпінням чекаю на реалізацію цього мого проекту .. але мені потрібно закінчити його спочатку. :)
Джеймс

Я думаю, вам потрібно написати @PathVariable ("тип"), щоб прив'язати до шляху.
FelixM

1
Я хочу мати www.mydomain.com/order/abc.def, зараз у контролері я отримую лише abc
prem30488

1
користувався ним regexp [a-zA-z0-9.]
prem30488

8

Якщо у вас є URL із змінними шляху, наприклад, www.myexampl.com/item/12/update, де 12 - це ідентифікатор, а create - це змінна, яку ви хочете використовувати для визначення вашого виконання, наприклад, за допомогою єдиної форми для оновлення та створюючи, ви робите це у своєму контролері.

   @PostMapping(value = "/item/{id}/{method}")
    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";
    }

Цей механізм гарантує, що змінна контура прив’язана до даної змінної.
ochiWlad

2

@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
}

Як виглядає форма для цього? Чи можу я використовувати одне із вхідних значень для визначення значення {ISBN}? Якщо так, то як я будую повну URL-адресу для параметра форми th: action?
Ян Горчичка

1

Анотація, яка вказує, що параметр методу повинен бути прив'язаний до змінної шаблону 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;
}

0

Припустимо, ви потрапили на 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
}

Так значення змінної отримують з URL-адреси


0

Це одна з приміток, яка використовується для відображення / обробки динамічних 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-запитів навесні.


Як виглядає форма для цього? Чи можу я використовувати одне із вхідних значень для визначення значення {ISBN}? Якщо так, то як я будую повну URL-адресу для параметра форми th: action?
Ян Горчичка

-1

подивіться на наведений нижче фрагмент коду.

@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

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