Problema com api Restful e front end usando JQuery[RESOLVIDO]

12 respostas
M

Boa Tarde estou com o seguinte problema,

estou criando uma aplicação separada em duas partes, uma API java que na verdade é uma webService Rest e a outra uma aplicaçao html usando JQuery.

O problema é que quando eu tento mandar uma solicitação post via a app HTML a API Java retorna Sucesso (codigo 200) porem o codigo Java nao chega a ser executado, logo a parte solicitante não recebe nenhuma resposta.

O mais estranho que achei é que quando eu mando a mensagem via um plugin do chrome que faz o envio de mensagens json tudo funciona normalmente.

Em ambas as app estou usando o jetty para roda-las.

Gostaria de saber se alguem já passou por algo do tipo?

Desde Já Agradeço.

Segue codigo do script .js que estou usando:

$.ajax({
  url:"http://localhost:55555/WebService/rest/usuarioPessoaFisico/consulta", 	
  method: "POST",
  data: JSON.stringify({"nome":"ra"}),
  type: "POST",
  contentType: "application/json; charset=utf-8",
  processData: true,
  dataType: 'json'}).done(function( msg ) {
    alert( "Data Saved: " + msg );
  });

e aqui o consumer do api:

@Path("/usuarioPessoaFisico")
public class ConsumerUsuarioFisico {

UsuarioFisicoControl usuarioFisicoControl ; 


@POST
@Path("/cadastro")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Resultado cadastroUsuarioPessoaFisica(UsuarioPessoaFisica usuarioPessoaFisica){

	return usuarioFisicoControl.cadastroUsuarioFisico(usuarioPessoaFisica);
}


@POST
@Path("/consulta")
@Produces(MediaType.APPLICATION_JSON)	
@Consumes(MediaType.APPLICATION_JSON)
public List<UsuarioPessoaFisica> consultaUsuarioPessoaFisica(UsuarioPessoaFisica usuarioPessoaFisica){

	return usuarioFisicoControl.consultaUsuarioFisico(usuarioPessoaFisica);

}

}

12 Respostas

I

Esse plugin do chrome que você comentou, seria o postman ? Bom se funcionar por lá é que está ok.
Agora uma dúvida porque quando você fez um post, é retornado 200 ?
Uma das principais características de web services em Rest é trabalhar sempre com o protocolo http, e claro certo, no caso de post 201.
List, Resultado, agora retornar objeto em rest não da.

M

SIm, o plugin que eu uso é o postman.

Então tanto quando mando pelo plugin quanto pela aplicação js o retorno eh codigo 200, mas quando vem pela aplicação parece que a url nao funciona, parece que o @Path("/consulta") nao funciona, como se a requisição entrasse no consumer e nao entrasse em nenhum metodo.

I

Sera que não tem nenhum problema de cache na sua aplicação?

I

http://localhost:55555/WebService/rest/usuarioPessoaFisico/consulta, se voce esta acessando isso e parece que não entra no método, coloca um log nele, esse método consultaUsuarioFisico, já trás o objeto deserializado ?

M

O metodo retorna um objeto comum mesmo, e pelo que eu entendi o Jersey na hora de responder transformaria ele em json, e tambem ja coloquei um log no metodo e acontece a mesma coisa que falei na pergunta, pelo post man o log aparece e pelo js nao…

I

O jersey não transforma em json, você teria que usar uma lib pra fazer a deserialização, por exemplo o jackson se tratando de json. No caso de seus métodos post, voce teria um objeto, serializaria pra json e envia.

M

Ahh, ta certo eu acabei me confundindo aqui mas eu estou usando o jackson tbm, tanto que quando mando pelo postman o que eh exibido pelo plugin eh uma resposta no formato json. So nao sei se o jeito que eu estou fazendo é o mais correto.

S

Amigo, teste dessa forma:

$.ajax({

url:“<a href="http://localhost:55555/WebService/rest/usuarioPessoaFisico/consulta">http://localhost:55555/WebService/rest/usuarioPessoaFisico/consulta</a>”,

type: “POST”,

data: {“nome”:“ra”},

success: function(msg) {

alert(msg);

},

cache: false

});
M

shuttner, essa foi a primeira forma que tentei, mas ele da erro 415, é algo relacionado a falta de especificação do tipo da mensagem enviada.

S

Se mesmo assim não funcionar, poderia mostrar o erro que retorna?
Acabei esquecendo do dataType.

$.ajax({

url:“<a href="http://localhost:55555/WebService/rest/usuarioPessoaFisico/consulta">http://localhost:55555/WebService/rest/usuarioPessoaFisico/consulta</a>”,

type: “POST”,

data: {“nome”:“ra”},

dataType: ‘json’,

success: function(msg) {

alert(msg);

},

error: function(msg){

<a href="http://console.info">console.info</a>(msg);

},

cache: false

});
M

Para funcionar a mensagem que voce mandou tive que acrescentar mais um campo o contentType: “application/json”, ai tanto no chrome quanto no fire fox a mensagem que eh printada no log do eclipse foi essa:

[DEBUG] REQUEST /WebService/rest/usuarioPessoaFisico/consulta on org.mortbay.jetty.HttpConnection@2e930ab2
[DEBUG] sessionManager=org.mortbay.jetty.servlet.HashSessionManager@2028aa2f
[DEBUG] session=null
[DEBUG] servlet=jersey-servlet
[DEBUG] chain=null
[DEBUG] servlet holder=jersey-servlet
[DEBUG] RESPONSE /WebService/rest/usuarioPessoaFisico/consulta 200

Quando eu executo pelo ie o comportamento eh diferente, ele entra na operação e executa printado inclusive o print que deixei no codigo.

M

Consegui resolver o problema atravez desse link:

Mto obrigado pela ajuda de todos.

Criado 31 de janeiro de 2016
Ultima resposta 8 de fev. de 2016
Respostas 12
Participantes 4