1
resposta

Erro Vraptor Rest + Jquery

Boa noite, tenho um método anotado com @Consumes para poder adicionar registro através de requisição Ajax com jquery, ocorre que realizo a chamada via ajax o registro é gravado no banco de dados porem o vraptor está retornando status 415 para minha página.

Método no controller

    @Transactional
    @Consumes(value = "application/json", options = WithoutRoot.class)
    @Post("/listaespera/persistrest")
    public void persistRest(ListaEspera listaespera) {
        listaespera.setOperador(operador.getUsuario());
        listaespera.setPsicologo(daoPsico.getById(Psicologo.class, listaespera.getPsicologo().getId()));
        System.out.println("Lista Espera: " + listaespera.getNome());
        validator.validate(listaespera);
        validator.onErrorSendBadRequest();
        if (listaespera.getId() == null) {
            dao.persist(listaespera);
            System.out.println("Salvando registro!");
        } else {
            dao.merge(listaespera);
        }
        System.out.println("Alterando status da requisição.");
        result.use(Results.status()).created();
    }

Function javascript

function persistRest() {
  console.log("persistRest");
  //
  var dados = formToJSON("frm-listaespera", "");
  console.log("Json: " + dados);
  //
  var URL = "http://localhost:8080/instituto-abc/listaespera/persistrest"
  $.ajax({
    url : URL,
    type : "POST",
    dataType : "json",
    data : dados
  }).done(function(response) {
    console.log("Registro salvo com sucesso!" + response.responseText);
    sweetAlert("sucess", "Sucesso", "Registro gravado no servidor!" + response.responseText);
  }).fail(function(response) {
    console.log("Erro ao realizar requisição ao servidor!" + response.responseText);
    sweetAlert("error", "Erro requisição", "Status: " + response.status + " StatusText: " + response.statusText);
  }).always(function() {
    console.log("Requisição finalizada");
  });
};

Meu Json

"{ "listaespera.id" : "1", "listaespera.nome" : "teste rest", "listaespera.psicologo.id" : "1", "listaespera.data" : "03/09/2019", "listaespera.celular" : "(44) 99999-8888", "listaespera.email" : "teste@gmail.com", "listaespera.tipo" : "1", "listaespera.observacao" : "Teste rest" }"

Transação Hibernate

19:28:27,714 INFO  [stdout] (default task-65) Hibernate: 
19:28:27,714 INFO  [stdout] (default task-65)     update
19:28:27,714 INFO  [stdout] (default task-65)         tb_listaespera 
19:28:27,714 INFO  [stdout] (default task-65)     set
19:28:27,714 INFO  [stdout] (default task-65)         celular=?,
19:28:27,714 INFO  [stdout] (default task-65)         data=?,
19:28:27,714 INFO  [stdout] (default task-65)         dt_transacao=?,
19:28:27,714 INFO  [stdout] (default task-65)         email=?,
19:28:27,714 INFO  [stdout] (default task-65)         nome=?,
19:28:27,714 INFO  [stdout] (default task-65)         observacao=?,
19:28:27,714 INFO  [stdout] (default task-65)         id_operador=?,
19:28:27,715 INFO  [stdout] (default task-65)         id_psicologo=?,
19:28:27,715 INFO  [stdout] (default task-65)         tp_espera=? 
19:28:27,715 INFO  [stdout] (default task-65)     where
19:28:27,715 INFO  [stdout] (default task-65)         id=?

Response

responseText: "<html><head><title>Error</title></head><body>Request with media type [application/x-www-form-urlencoded]. Expecting one of [application/json].</body></html>"
status: 415
statusText: "Unsupported Media Type"
1 resposta

Oi ostrowskijr, você espera no seu controller um request com content-tye configurado para application/json, mas não está configurando isso no seu request, o dataType é para dizer o tipo de resposta que você espera, para configurar o tipo de dado do request, você precisa usar o contentType com application/json.