Spring mvc @PathVariable

125

¿Me puede dar una breve explicación y una muestra del uso @PathVariableen mvc de primavera? Por favor, incluya cómo escribe la url?
Estoy luchando por obtener la URL correcta para mostrar la página jsp. Gracias.

James
fuente
1
mostrar un jsp a través del controlador mvc de primavera se realiza a través de ver o decir ModelAndView. @PathVariableanotación utilizada para obtener el nombre de la variable y su valor al final del controlador. por ejemplo, www.abcd.com/api/value=34455&anotherValue=skjdfjhks here value y anotherValue es variable que puede obtener utilizando @PathVariable ("value") int value y @PathVariable ("anotherValue") String anotherValue
agpt

Respuestas:

221

supongamos que desea escribir una url para obtener algún orden, puede decir

www.mydomain.com/order/123

donde 123 es orderId.

Así que ahora la url que usará en el controlador mvc de primavera se vería así

/order/{orderId}

Ahora el ID del pedido se puede declarar una variable de ruta

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

si usa la URL www.mydomain.com/order/123, la variable orderId se completará con el valor 123 en primavera

También tenga en cuenta que PathVariable difiere de requestParam ya que pathVariable es parte de la URL. La misma url usando request param se vería así www.mydomain.com/order?orderId=123

Referencia oficial de API DOC
Spring

descifrador
fuente
en el uso de pathVariable. ¿Necesito importar algo? o alguna dependencia? Gracias.
James
solo necesita importar la anotación PathVariable import org.springframework.web.bind.annotation.PathVariable
codificador
sí, proporcione algunos detalles, lo que está tratando de hacer y cuál es el problema
codificador
stackoverflow.com/questions/19804202/… .. aquí está el código
james
Quiero tener www.mydomain.com/order/abc.def, ahora en el controlador solo
obtengo
10

Eche un vistazo al fragmento de código a continuación.

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

Espero que ayude a construir su código.

Ashu
fuente
No estoy familiarizado con el modelo y la vista. jeje. gracias por cierto ... espero implementar esto en mi proyecto ... pero necesito terminarlo primero. :)
James
Creo que necesita escribir @PathVariable ("tipo") para vincular a la ruta.
FelixM
1
Quiero tener www.mydomain.com/order/abc.def, ahora en el controlador solo
obtengo
1
lo usé regexp [a-zA-z0-9.]
prem30488
8

Si tiene una URL con variables de ruta, por ejemplo www.myexampl.com/item/12/update donde 12 es la identificación y crear es la variable que desea usar para especificar su ejecución, por ejemplo, al usar un formulario único para hacer una actualización y crea, haces esto en tu controlador.

   @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
fuente
Este mecanismo garantiza que una variable de ruta esté vinculada a una variable dada.
ochiWlad 02 de
2

@PathVariable se utiliza para obtener el valor de la URL

por ejemplo: para obtener alguna pregunta

www.stackoverflow.com/questions/19803731

Aquí idse pasa alguna pregunta como parámetro en URL

Ahora para obtener este valor en controllertodo lo que tiene que hacer es simplemente pasar @PathVariable en el parámetro del método

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}
Anway Bhutkar
fuente
¿Cómo se ve el formulario para esto? ¿Puedo usar uno de los valores de entrada para especificar el valor {ISBN}? En caso afirmativo, ¿cómo construyo la URL completa para el parámetro de formulario th: action?
Jan Horčička
1

Anotación que indica que un parámetro de método debe estar vinculado a una variable de plantilla URI. Compatible con los métodos de controlador anotado 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;
}
0gam
fuente
0

Supongamos que llega a una URL como www.example.com/test/111. Ahora debe recuperar el valor 111 (que es dinámico) en su método de controlador. En ese momento utilizará @PathVariable de la siguiente manera:

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

SO el valor variable se recupera de la url

Gagan
fuente
0

Es una de las anotaciones utilizadas para asignar / manejar URI dinámicos. Incluso puede especificar una expresión regular para el parámetro dinámico URI para aceptar solo un tipo específico de entrada.

Por ejemplo, si la URL para recuperar un libro usando un número único sería:

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

El número indicado al final de la URL se puede obtener usando @PathVariable como se muestra:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

En resumen, es solo otro era extraer datos de solicitudes HTTP en Spring.

Arahan Jha
fuente
¿Cómo se ve el formulario para esto? ¿Puedo usar uno de los valores de entrada para especificar el valor {ISBN}? En caso afirmativo, ¿cómo construyo la URL completa para el parámetro de formulario th: action?
Jan Horčička
-1

Eche un vistazo al fragmento de código a continuación.

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

Si desea que el proyecto completo vea cómo funciona, descárguelo del siguiente enlace:

Proyecto UserInfo en GitLab

Saurabh Juneja
fuente