Mvc Brasil @PathVariable

125

Você pode me dar uma breve explicação e uma amostra no uso @PathVariableno spring mvc? Inclua como você digita o URL?
Estou tendo dificuldades para obter o URL certo para mostrar a página jsp. Obrigado.

James
fonte
1
mostrar um jsp através do spring mvc controller é feito através do view ou say ModelAndView. @PathVariableanotação usada para obter o nome da variável e seu valor no final do controlador. por exemplo, www.abcd.com/api/value=34455&anotherValue=skjdfjhks aqui value e anotherValue é uma variável que você pode obter usando @PathVariable ("value") int value e @PathVariable ("anotherValue") String anotherValue
agpt

Respostas:

221

suponha que você queira escrever um URL para buscar algum pedido, você pode dizer

www.mydomain.com/order/123

onde 123 é orderId.

Então agora o URL que você usará no controlador mvc da primavera ficaria

/order/{orderId}

Agora, o ID do pedido pode ser declarado uma variável de caminho

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

se você usar o URL www.mydomain.com/order/123, a variável orderId será preenchida pelo valor 123 na primavera

Observe também que PathVariable difere de requestParam, pois pathVariable faz parte da URL. O mesmo URL usando o parâmetro de solicitação seria semelhante www.mydomain.com/order?orderId=123

Referência oficial da API DOC
Spring

codificador
fonte
usando pathVariable. preciso importar alguma coisa? ou alguma dependência? obrigado.
James6
você só precisa importar PathVariable anotação importação org.springframework.web.bind.annotation.PathVariable
codificador
sim fornecer alguns detalhes, o que você está tentando fazer e qual é o problema
codificador
stackoverflow.com/questions/19804202/... .. aqui está o código
james
Quero ter www.mydomain.com/order/abc.def, agora em controlador eu estou recebendo apenas abc
prem30488
10

Veja o trecho de código abaixo.

@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 ajude na construção do seu código.

Ashu
fonte
não estou familiarizado com o modelo e a vista. ele Ele. obrigado btw .. ansioso para implementar isso no meu projeto .. mas eu preciso terminar primeiro. :)
james
Eu acho que você precisa escrever @PathVariable ("type") para vincular ao caminho.
FelixM 23/09/14
1
Quero ter www.mydomain.com/order/abc.def, agora em controlador eu estou recebendo apenas abc
prem30488
1
usei regexp [a-zA-z0-9.]
prem30488 03/11
8

Se você tiver URL com variáveis ​​de caminho, exemplo www.myexampl.com/item/12/update em que 12 é o ID e create é a variável que você deseja usar para especificar sua execução, por exemplo, usando um único formulário para fazer uma atualização e criar, você faz isso no seu 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
fonte
Esse mecanismo garante que uma variável de caminho esteja vinculada a uma determinada variável.
precisa saber é o seguinte
2

@PathVariable usado para buscar o valor do URL

por exemplo: para tirar uma dúvida

www.stackoverflow.com/questions/19803731

Aqui alguma pergunta idé passada como um parâmetro no URL

Agora, para buscar esse valor, controllerbasta passar @PathVariable no parâmetro method

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}
Anway Bhutkar
fonte
Como é o formulário para isso? Posso usar um dos valores de entrada para especificar o valor {ISBN}? Se sim, como construo o URL completo para o parâmetro do formulário th: action?
Jan Horčička 29/04
1

Anotação que indica que um parâmetro de método deve ser associado a uma variável de modelo de URI. Suportado para métodos manipuladores anotados 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
fonte
0

Suponhamos que você acesse um URL como www.example.com/test/111. Agora você deve recuperar o valor 111 (que é dinâmico) para o seu método de controlador. No momento, você usará @PathVariable da seguinte maneira:

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

SO, o valor da variável é recuperado do URL

Gagan
fonte
0

É uma das anotações usadas para mapear / manipular URIs dinâmicos. Você pode até especificar uma expressão regular para o parâmetro dinâmico do URI para aceitar apenas tipos específicos de entrada.

Por exemplo, se o URL para recuperar um livro usando um número exclusivo fosse:

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

O número indicado no último URL pode ser buscado usando @PathVariable, como mostrado:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

Em suma, é apenas outra foi extrair dados de solicitações HTTP no Spring.

Arahan Jha
fonte
Como é o formulário para isso? Posso usar um dos valores de entrada para especificar o valor {ISBN}? Se sim, como construo o URL completo para o parâmetro do formulário th: action?
Jan Horčička 29/04
-1

dê uma olhada no snippet de código abaixo.

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

Se você deseja que o projeto completo veja como ele funciona, faça o download no link abaixo: -

Projeto UserInfo no GitLab

Saurabh Juneja
fonte