Buscar

Casa do Código Capítulo 7. Integração entre Sistemas usando o VRaptor Alterando o link para a edição de livros Na listagem de livros estamos usando...

Casa do Código Capítulo 7. Integração entre Sistemas usando o VRaptor
Alterando o link para a edição de livros
Na listagem de livros estamos usando o seguinte link:
Modificar
Usando o recurso de uma maneira REST, estamos passando o ISBN diretamente na url, e não como parâmetro. Nesse caso, podemos passar parâmetros para o método do controller que serão usados na formação da url. Fazemos isso usando colchetes, ao invés de parênteses:
Modificar
Essa passagem de parâmetros só será efetiva se ele for usado diretamente na URL.
Resolvendo conflitos de rotas
Ao criar a rota do método edita, usamos @Get("/livros/{isbn}"). O problema é que a rota para o método formulário é, implicitamente, @Path("/livros/formulario"), que também casa com o padrão @Get("/livros/{isbn}"), com o ISBN valendo formulario. Isso, a princípio, vai gerar um 404, pois se o método formulário não tem nada anotado, a sua rota tem menos prioridade. Mas caso ele estivesse anotado com @Get("/livros/formulario"), receberíamos um erro: There are two rules that matches the uri '/livros/formulario' with method GET: [[FixedMethodStrategy: /livros/formulario LivrosController.formulario() [GET]], [FixedMethodStrategy: /livros/{isbn} LivrosController.edita(String) [GET]]] with same priority. Consider using @Path priority attribute. Ou seja, ele fala que o método formulario e o método edita conseguem tratar a uri /livros/formulario, com a mesma prioridade. Na última frase, ele dá a dica de usar o atributo priority da anotação @Path para resolver essa ambiguidade. Para isso, devemos mudar o método edita para: @Get @Path(value="/livros/{isbn}", priority=Path.LOWEST) public void edita(String isbn) {...} Assim, essa rota tem a menor prioridade, e a /livros/formulario será usada para o método formulario do controller. Caso o ISBN fosse um número, essa configuração não seria necessária: @Get("/livros/{isbn}") public void edita(Long isbn) {...} Nesse caso, como o VRaptor sabe que o ISBN é um número (Long), ele sabe que a última parte do caminho tem que conter apenas dígitos. Dessa forma, /livros/1234 cai no método edita, mas /livros/abcd dá 404 direto. 7.7 Usando REST no navegador Pensando em REST estamos facilitando a vida do cliente que vai consumir os serviços da nossa aplicação. Mas nem sempre esses clientes são outras aplicações. Quando uma pessoa acessa o sistema usando um navegador, ela é o cliente do sistema, usando o navegador como cliente HTTP. Por isso, podemos aplicar as ideias do REST à Web humana também, para implementarmos as interações com o usuário usando HTML e javascript. Uma limitação forte dos navegadores é que só conseguimos fazer requisições GET e POST nativamente. Isso significa que, se quisermos fazer um formulário para alterar um livro, não conseguimos fazer: Mas para simular o método PUT, o VRaptor (e alguns outros frameworks Web) suporta receber um parâmetro a mais na requisição indicando qual é o método real que queremos executar. No VRaptor, devemos deixar o formulário como POST e passar um parâmetro chamado _method com valor PUT:

Essa pergunta também está no material:

Vraptor - Desenvolvimento Agil para web com Java - Casa do Codigo
220 pág.

Português Escola Colegio Estadual Barao Do Rio BrancoEscola Colegio Estadual Barao Do Rio Branco

Ainda não temos respostas

Você sabe responder essa pergunta?

Crie uma conta e ajude outras pessoas compartilhando seu conhecimento!


✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais