[Resolvido] Metódos http com vraptor

Olá!

Li sobre Http methods com vraptor http://vraptor.caelum.com.br/documentacao/resources-rest/, mas fiquei em dúvida, como identificar o tipo de metódo q esta chamando meu controller.

tenho o metódo:

        @Get
	@Post
	@Path("/confirmacao")
	public void confirmacao(){
		
	}

e eu gostaria de tratar diferentemente as solicitações, algo do tipo:

        @Get
	@Post
	@Path("/confirmacao")
	public void confirmacao(){

if(webMethod().equals("post)){
tratar post;
}else{
tratar get;
}

alguém tem alguma idéia??

att,

O mais elegante é você ter métodos distintos para GET e POST.

Seu codigo ficaria assim:

[code]@Get @Path("/confirmacao")
public void confirmacaoGet(){
// faz alguma coisa
}

@Post @Path("/confirmacao")
public void confirmacaoPost(){
// faz outra coisa
}[/code]

opa garcia-jj,

obrigado deu 100% certo aqui!

só mais uma dúvida, supondo q a chamada seja feita via POST, eu consigo resgatar valores desse request?

por exemplo com servlets seria algo do tipo:

HttpServletRequest request;

request.getAttributeNames();

Obrigado!

att,

essa página explica:
http://vraptor.caelum.com.br/documentacao/resources-rest/

na seção “Parâmetros dos métodos”

se vc vai passar parâmetros simples, dá pra receber direto. Por exemplo o parâmetro teste=abc

public void logica(String teste) {

}

Super Lucas!

valeu!

eu pulei com 100% de precisão a seção “Parâmetros dos métodos”.

…agora complicou um pouco.
eu preciso receber quase 30 parâmetros, p/ instanciar 1 Objeto.

Eu tenho os gets e sets normal desse Objeto, os atributos tem o mesmo nome dos parâmetros e o envio desse post é realizado por um outro sistema.
Desculpa a falta de conhecimento, mas se eu fizer isso

public void logica(Objeto objeto) {  

objeto.getNome();

}

será q magicamente ele seria instanciado com os valores dos parâmetros???

Muito Obrigado!

att,

sim, se tiver os getters e setters apropriados, o objeto vem populado magicamente com os valores que vc passou

SHOW DE BOLA!!!

melhor do q isso só se já estivesse tudo programado hehehe

Muito obrigado Lucas!(de novo! rs)

Obrigado também pela ajuda garcia-jj!

att,

É essa duvida que eu tenho, se eu tiver um cadastro de clientes, por exemplo, tenho que ter um método

@Post
@Path("/cliente/novo")
public void novo(Cliente c) {}

ou


@Post
@Path("/cliente/novo")
public void novo(String nome, String endereco, /*outros parametros*/) {}

?

Caso eu preciso apenas do objeto Cliente, como eu faria com jQuery, por exemplo?
Passaria os parametros nome e endereco na função

$.post(url, {nome, endereco});

?

no caso de novo(Cliente c) vc faria:

$.post(url, {'c.nome': nome, 'c.endereco': endereco});

desde que existam os setters respectivos.

Uma duvida!
não consigo passar o parametro para meu metodo através da url

e no meu metodo esta assim

@Post @Path(value="/download") public InputStreamDownload download(XmlNfePojoImpl xmlSt) {...}

o problema maior é que não consigo acessar os parametros?

vc precisa dar um nome pro parâmetro, de acordo com o parametro do método… algo do tipo:

..../download?xmlSt.numNfe=${xml.numNfe}

de um dos sites que pesquisei achei esse trecho de código

porem assim ou da forma que sitei anterior ele nem mesmo entra no método
é como se ele não entendesse o parametro

dentro do metodo no meu controller os parametros ficam vazios não consigo recuperar o valor dentro do controller

esse é meu unico problema.

nas mesma tela eu tenho um formulário
e os campos do formulário eu consigo enviar para o controller porém o parametro do método não consigo enviar nem da forma que esta na documentação do VRaptor e nem das formas que citei aqui no forum
se alguem puder me ajudar agradeço muito .

vamos lá:

@Post  
        @Path(value="/download")  
        public InputStreamDownload download(XmlNfePojoImpl xmlSt) {...}  

o cara tá como @Post, então ele não vai funcionar num link. Vc precisa mudar pra @Get.

pra ele aceitar o parâmetro xmlSt.numNfe, a classe XmlNfePojoImpl precisa ter o método setNumNfe(…)

Infelizmente seguindo as recomendações os valores dentro do controller estão vazios

deixa perguntar é necessário criar uma classe XMLLogic por exemplo contendo apenas esse objeto ou uma Interceptor só para tratar isso?

o parâmetro do método download (xmlSt) tá vindo null?

o método tá como @Get? o método é invocado?

sim para as tres perguntas

@Path("/download") @Get public InputStreamDownload download(XmlNfePojoImpl xmlSt) { String numeroNota = xmlSt.getNumNfe() // aqui ele é nulo }

e na pagina ele esta assim

[code] <display:table cellspacing=“0” cellpadding=“0"
name=”${usuarioSession.lista}" id=“xmlSt” class=“food_planner”>

					<display:column property="chaveNfe" title="Chave da Nota" />
					<display:column property="numNfe" title="Numero Nota Fiscal" />
					<display:column property="cnpjCliente" title="Cnpj" />

					<display:column title="Download" ><a class="btn-nfe" href="${pageContext.request.contextPath}/download?xmlSt.numNfe=${xmlSt.numNfe}">Baixar NFe</a></display:column>

					
				</display:table> [/code]

faz o seguinte… com o browser aberto nessa página, abra o código fonte dela e veja qual é a url que ele está colocando no <a class=“btn-nfe”…

está com o numNfe preenchido?

de novo: XmlNfePojoImpl tem o método setNumNfe()?

sim possui,
é um pojo padrão com getters e setters comuns
não é?

blz, e o código fonte da página no browser, como tá?