Método POST usando JQuery Ajax, Java

Galera é o seguinte, quero pegar os dados de um formulario html e atravez do JQuery jogar ele pro meu BD.

function cadastro() {

 $.ajax({
    type : "POST",
    url : baseURL+"/cadastro",
	data : "",
	async : false,
	cache : false,
	dataType : 'json',
	success :

});

}

Sendo que não sei como tratar esses dados no Java, nao sei nem como mandar eles para lá e depois gravar no banco, na verdade eu consigo, se eu mesmo criar o corpo do JSON e mandar pelo POSTMAN, mas preenchendo pelo HTML nao tenho ideia.

Se a requisição pelo postman está funcionando, então suponho que o servidor esteja funcionando e que sua dúvida é somente no frontend, de como pegar os valores e cadastrar no banco, certo?

Nesse caso, basta você preencher o parâmetro data do $.ajax. Algo como:

function cadastro() {

// dados de exemplo
var dados = {
  nome: $('#campoNome').val(),
  endereco: $('#campoEndereco').val()
}

 $.ajax({
    type : "POST",
    url : baseURL+"/cadastro",
	data : dados,
	async : false,
	cache : false,
	dataType : 'json',
	success : function(){ alert("sucesso!"); }
});
}

Lembrando que você pode usar o success, dentre outros eventos, para verificar se a requisição funcionou ou não.

Abraço.

1 curtida

Valeu amigo, vou testar agora, no caso, os dados eu tenho que mandar em formato JSON sempre, certo ?

Não necessariamente, você pode mandar como query string (veja na documentação). Json só é o mais comum.

Abraço.

Cara, as informaçoes que estou mandando nao chega no servidor de jeito nenhum, só chega “null”, estou tentando testar dessa maneira

//TESTE
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/save")
public Response postMsg(String data) {
	
	String result = "Mesangem: " + data;
	return Response.status(200).entity(result).build();
}`

Já tentou a conversão dos valores em um JSON para depois enviar a requisição?

Seu dataType está definido como 'json', não seria um contentType de 'application/json' ?

Exemplo:

function cadastro() {
  var dadosJson = JSON.stringify({
    "nome": $('#campoNome').val(),
    "endereco": $('#campoEndereco').val()
  });

  $.ajax({
    url: baseURL + "/cadastro",
    type: "post",
    data: dadosJson,
    contentType: "application/json",

    success: function(response) {
      alert("Cadastrado com sucesso!");
    },

    error: function(error) {
      alert("Erro ao tentar realizar o cadastro!");
    }
  });
}
1 curtida

Resolve uma coisa aparece outra kkkk Eu to usando a biblioteca Gson para montar as classes java a partir do Json, porém a classe tem herança, tem outras classes como atributo etc… minha classe é PessoaFisica, que herda de Pessoa

public class PessoaFisica extends Pessoa {

//Atributos da Classe
private String 				dtNascimento;
private String   				sexo;
private DocumentoPessoaFisica   documentoPessoaFisica;

E o metodo que estou usando para testar é esse:

	//TESTE
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Path("/save")
public Response postMsg(String data) {
	
	System.out.println(data);
	
	PessoaFisica pf = gs.fromJson(data, PessoaFisica.class); 
	
	String result = "Nome: " + pf.getNome() + "\n"+
	"Email: " + pf.getEmail() +"\n" +
	"Logradouro:" + pf.getEndereco().getLogradouro();
	
	System.out.println(result);
	
	return Response.status(200).entity(result).build();
}

O problema é essa quando coloco pra imprimir esse result com logradouro, ou qualquer outra classe atributo, ele da NullPointerException, ele só consegue me trazer os dados que estao na classe Pessoa e PessoaFisica``

public abstract class Pessoa {
//Atributos da Classe
// private Integer codPessoa;
private String nome;
private String email;
private String senha;
private Endereco endereco;
private Telefone telefone;```

E esse comportamento está correto.
Ou você envia todos os dados ou eles estarão nulos.

    var json = {   
        nome: "Rodrigo",
        email: "digo.15rj@gmail.com",
        senha: "1234",
        Endereco: {
            logradouro: "Estrada dos Tres Rios",
            numero: "670",
            complemento: "202",
            bairro: "Freguesia",
            cidade: "Rio de Janeiro",
            uf: "RJ",
            cep: "22745005"
        },
         Telefone: {
            numero: 21982385725
        },
        dtNascimento: "26/02/1997",
        sexo: "masculino",
        DocumentoPessoaFisica: {
            cpf: 18388778781,
            rg: "301941399",
            dtEmissao: "26/02/1997",
            orgaoEmissor: "Detran",
            habilitacao: 12345678912
        }
} 

Estou enviando todos esses dados.

Consegue ver o erro? Dica: java é case sensitive.

Meu deus, será q é isso, eu achava que tinha que colocar o tipo da classe em si, mesmo que fosse atributo, vou testar

Cara, você sabe por que tanto se fala em boas práticas e, principalmente, padrões de nomenclatura? Não é só por estética, é por ser muito mais fácil prever comportamentos.
Se você tem uma classe Pessoa e nela contém um atributo nome, caso siga a recomendação de nomes para métodos, terá os assessores como

public class Pessoa {
    private String nome;

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return this.nome;
    }
}

Sendo assim, qualquer API ou framework poderá interagir com o atributo nome a partir destes assessores (salvo se o framework utilizar algum recurso de manipulação direta ao bytecode, caso do hibernate, mas, via de regra, isso não ocorre).

O Gson se utiliza dessa “facilidade” oferecida pelos padrões do java, assim sendo, ele vai buscar o nome do elemento json como sendo camelCase e começando em minúsculo. Salvo se você definir como exceção e fornecer o nome que deve ser procurado, conforme pode ser visto aqui

1 curtida