Jersey+rest+jquery[RESOLVIDO]

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!