Angular com Vraptor
No inicio de 2016 desenvolvi uma aplicação utilizando AngularJs (v. 1.5.0) e vRaptor 3.4.2. Para enviar um JSON no formato padrão do vRaptor era preciso usar uma função chamada $httpParamSerializerJQLike. Funcionava muito bem e resolvia os problemas.
/*
{produto:{id:1,nome:'camiseta'}}
o vRaptor deve receber produto.id e produto.nome*/
return $http({
method: 'POST',
url: "produto/adiciona",
data: $httpParamSerializerJQLike(produto),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
Hoje estou no inicio de uma nova aplicação, e decidi usar o Angular 5 com vRaptor 4.2.0. Mudou muita coisa nos 2 frameworks, especialmente no Angular. Neste novo framework não existe o método $httpParamSerializerJQLike e não existe qualquer função similar.
Get Guilherme Villaca’s stories in your inbox
Join Medium for free to get updates from this writer.
A forma que encontrei para resolver isso foi a seguinte: 1º criando um model
export clas Produto {
id: number;
nome: string; public initJSON(json: any): Produto{
this.id = json.id;
this.nome = json.nome;
} public toJSON(){
return {
'produto.id' = this.id;
'produto.nome' = this.nome;
}
}}
o 2º passo é no momento de enviar a informação para o vRaptor dentro do service.
save(produto: Produto){
let req = this.httpClient.post(this.url, $.param(produto.toJSON()), {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
});
req.subscribe();
}Reparem que o que faz a mágica é o método toJSON() do modelo que criamos e utilizando o método param do jQuery.
Para criar um objeto com dados do banco de dados basta utilizar o outro método criado no modelo.
this.produtoService.getById(params['id']).then(result => {
this.produto.initJSON(result['data'])
});No Angular 5 os parâmetros da URL são acessíveis no componente utilizando o ActivatedRoute.
Caso alguém tenha dúvida posso criar um projeto e compartilhar via github.








