Spring mvc @PathVariable


125

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


1
показывая через JSP яровой контроллер Mvc осуществляется с помощью зрения или сказать ModelAndView. @PathVariableаннотация, используемая для получения имени переменной и ее значения в конце контроллера. например, www.abcd.com/api/value=34455&anotherValue=skjdfjhks здесь value, а anotherValue - это переменная, которую можно получить, используя значение типа @PathVariable ("value") int и @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
Spring


при использовании pathVariable. мне нужно что-то импортировать? или какая-то зависимость? Спасибо.
james

вам просто нужно импортировать аннотацию PathVariable import org.springframework.web.bind.annotation.PathVariable
coder

да, предоставьте некоторые подробности, что вы пытаетесь сделать и в чем проблема
coder


Я хочу иметь 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;
}

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


Я не знаком с моделью и видом. хе - хе. спасибо, кстати ... с нетерпением жду реализации этого в моем проекте ... но сначала мне нужно закончить. :)
james

Я думаю, вам нужно написать @PathVariable ("тип"), чтобы привязать к пути.
FelixM

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

1
использовал регулярное выражение [a-zA-z0-9.]
prem30488 03

8

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

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

Предположим, вы попали по адресу 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-запросов в Spring.


Как выглядит форма для этого? Могу ли я использовать одно из входных значений для указания значения {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 на GitLab

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.