Parâmetros para HTTP GET (Jersey) [RESOLVIDO]

2 respostas
E

Olá pessoal!

Estou implementando um web service RESTful aqui utilizando o Jersey e gostaria de saber o seguinte: É trivial passarmos um JSON por exemplo para um POST, que poderia ser implementado da seguinte forma no servidor:

@POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public Cliente addCliente(Cliente cliente) { try { clienteDAO.add(cliente); return cliente; } catch (Exception e) { throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR); } }
Porém como seria a melhor forma de implementar um GET passando um objeto Cliente (seja por JSON, XML, etc…)? Pois todos os exemplos que vi até hoje se baseia na própria URL (seja por PathParam ou QueryParam). Não tem uma forma de transmitir o objeto Cliente mesmo? Algo como:

@GET @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public Cliente get(Cliente cliente) { try { return clienteDAO.get(cliente); } catch (Exception e) { throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR); } }
Existe alguma forma de fazer isso?

2 Respostas

E

Ou seja, eu precisaria basicamente passar um request body para um GET. Teria como fazer algo parecido ou neste caso é melhor mudar o método para PUT ou POST?

Pois a função do serviço em específico é um GET mesmo… Eu crio o protótipo do cliente que eu quero retornar, mando para o servidor (via JSON) e este me retorna o cliente completo que segue aquele protótipo (temos isso em operações CRUD e é muito trivial)…

E

Bom, andei lendo alguns artigos e tópicos no stackoverflow sobre isso e pelo que vi somente conseguirei enviar um corpo na requisição se for através de PUT ou POST… Então mesmo que a função do método é executar uma busca no banco, este não poderá ser um HTTP GET… Não sei se é o aconselhável mas é a alternativa que encontrei pois o que preciso é enviar um JSON, e não parâmetros de URL através de Path/QueryParam…

By the way, vou marcar o tópico como resolvido…

Criado 16 de novembro de 2012
Ultima resposta 19 de nov. de 2012
Respostas 2
Participantes 1