Pessoal estou com dificuldades em enviar uns dados para o servidor, quero enviar as latitudes e longitudes de um poligono do google maps, abaixo segue o código do cliente:
jQuery.ajax({
type: "POST",
url: "/SCER/webresources/cadastroLocalizacoes",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: formToJSON(polygon),
success: function(dados) {
}
});
function formToJSON(poligono) {
var dadosJson;
var quantiVertices = poligono.getVertexCount();
for(i=0;quantiVertices>i;i++){
dadosJson+= JSON.stringify({
"lat": poligono.getVertex(i).lat(),
"lng": poligono.getVertex(i).lng()
});
}
console.log('Json: ' + dadosJson);
return dadosJson;
}
Servidor:
package com.arcelormittal.scer.controller.restfull.resources;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/cadastroLocalizacoes")
public class GerenciamentoCadastroLocalizacoes {
@POST
@Produces("application/json")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void gerenciametoLocalizacoes(@PathParam("cordenadas") String coordenadas) {
System.out.println("Coornedadas: " + coordenadas);
}
}
O problema é que no servidor não esta chegando o json que estou enviado do cliente, alguem sabe o porque?
Olá amigo, exite sim um por quê.
Seguinte, existe um esquema do ajax (principalmente entre dominios) que é o seguinte.
Voce pode usar o plugin do firebug no firefox ou apertar F12 no chome e monitorar pela aba rede o seguinte:
Quando o ajax chama sua aplicação no server por exemplo:
var urlAjax = "http://www.suaaplicaçãoweb.com.br";
mas a url da pagina for de domínio diferente tipo:
var urlAjax = "http://www.cliente123.com.br";
isso é interpretado como ajax cross domain.
Sendo assim vc precisa implementar o metodo OPTIONS no seu WebService Rest e nesse metodo que trata o Options vc precisa devolver alguns headers http para que o navegador permita a chamada ajax.
Pesquise por Ajax CORS ou http AccessControl-Allow-Orign etc…
ou veja tudo detalhado aqui: http://www.bennadel.com/blog/2327-Cross-Origin-Resource-Sharing-CORS-AJAX-Requests-Between-jQuery-And-Node-js.htm
Ah lembrando que seu javaScript tem que vir do seu httpServer como apache, Nginx etc… rodadno como local não vai funcionar!
espero ter ajudado
fallow
O esquema é que a requisição está chagando no servidor, coloquei um system.out.println() e exibiu a mensagem porem os dados não foram enviados do cliente para o servidor.
Ah amigo, desculpa foi desatenção minha.
Veja seu código:
@Path("/cadastroLocalizacoes")
public class GerenciamentoCadastroLocalizacoes {
@POST
@Produces("application/json")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void gerenciametoLocalizacoes(@PathParam("cordenadas") String coordenadas) {
System.out.println("Coornedadas: " + coordenadas);
}
}
vc está usando @PathParam mas nao declarou ele na sua @Path:
Vc pode fazer o seguinte:
@Path("/cadastroLocalizacoes")
public class GerenciamentoCadastroLocalizacoes {
@POST
@Path("/{cordenadas}")
@Produces("application/json")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void gerenciametoLocalizacoes(@PathParam("cordenadas") String coordenadas) {
System.out.println("Coornedadas: " + coordenadas);
}
}
ou
@Path("/cadastroLocalizacoes")
public class GerenciamentoCadastroLocalizacoes {
@POST
@Path("/cordenadas/{cordenadas}") //Nessa opção sua url para o ajax seria http://seu cominioajax/cadastroLocalizações/cordenadas/valo123
@Produces("application/json")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void gerenciametoLocalizacoes(@PathParam("cordenadas") String coordenadas) {
System.out.println("Coornedadas: " + coordenadas);
}
}
espero ter ajudado
fallow
Obrigado cara fiz dessa forma e funcionou:
jQuery.ajax({
type: "POST",
url: "/SCER/webresources/cadastroLocalizacoes/cordenadas/"+formToJSON(polygon),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(dados) {
}
});
Só gostaria de saber se tem como passar meu parâmetro assim:
jQuery.ajax({
type: "POST",
url: "/SCER/webresources/cadastroLocalizacoes/cordenadas",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: formToJSON(polygon),
success: function(dados) {
}
});
Teria como?
Vc precisa especificar o @Path para obter os parametros que precisa.
Vjea que c vc especificar somente /coordenadas sem o {“suavariavel”} o Jersey nao vaite passar o valor que precisa OK!
Fallow
Show de bola cara, obrigado pela ajuda!