{“timestamp”:1622313294057,“status”:500,“error”:“Internal Server Error”,“message”:“”,“path”:“/api/receita/incluir”} ×

Vou colocar o link do projeto do github. Estou tentando colocar data para pegar com ajax, e enviar para o meu banco de dados, que está conectado junto com o meu springboot. Mas quando envio o formulário, aparece o erro:

{"timestamp":1622313294057,"status":500,"error":"Internal Server Error","message":"","path":"/api/receita/incluir"}

Alguém pode me dar uma luz. Por favor.

Projeto

Back-End:

package com.savemoney.savemoney.Entities;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="receita")
public class Receita{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String nome_receita;
    private float valor_receita;
    private String descricao_receita;

    @DateTimeFormat (pattern = "dd/MM/yyyy")
    private Date data_receita;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome_receita() {
        return nome_receita;
    }

    public void setNome_receita(String nome_receita) {
        this.nome_receita = nome_receita;
    }

    public float getValor_receita() {
        return valor_receita;
    }

    public void setValor_receita(float valor_receita) {
        this.valor_receita = valor_receita;
    }

    public String getDescricao_receita() {
        return descricao_receita;
    }

    public void setDescricao_receita(String descricao_receita) {
        this.descricao_receita = descricao_receita;
    }

    public Date getData_receita() {
        return data_receita;
    }

    public void setData_receita(Date data_receita) {
        this.data_receita = data_receita;
    }
package com.savemoney.savemoney.Resources;
    
    import java.util.List;
    
    import com.savemoney.savemoney.Controller.Receita_Controller;
    import com.savemoney.savemoney.Entities.Receita;
    import com.savemoney.savemoney.Repositories.ReceitaRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.PutMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping(value = "/api/receita")
    public class ReceitaResource {
    
        @Autowired
        private ReceitaRepository receita_repository;
    
        private ResponseEntity<Receita> responseEntity;
    
        @GetMapping("/listar")
        public List<Receita> listar() {
            return receita_repository.findAll();
        }
    
        @GetMapping("get/{id}")
        public Receita get(@PathVariable(value = "id") long id) {
            return receita_repository.findById(id);
        }
    
        @PostMapping("/incluir")
        public ResponseEntity incluir(@RequestBody Receita receita) {
            Receita_Controller receita_controller = new Receita_Controller();
            if (receita_controller.Validar_Receita(receita)) {
                receita = receita_repository.save(receita);
                return new ResponseEntity(receita, HttpStatus.OK);
            } else {
                return new ResponseEntity("Receita é inválido", HttpStatus.INTERNAL_SERVER_ERROR);
            }
        }
    
        @PutMapping("/editar")
        public ResponseEntity<Receita> editar(@RequestBody Receita receita) {
            Receita_Controller receita_controller = new Receita_Controller();
            if (receita_controller.Validar_Receita(receita)) {
                receita = receita_repository.save(receita);
                return new ResponseEntity(receita, HttpStatus.OK);
            } else {
                return new ResponseEntity("Nome do aluno é inválido", HttpStatus.INTERNAL_SERVER_ERROR);
            }
        }
    
        @PostMapping("/remover")
        public Receita remover(@RequestBody Receita receita) {
            receita_repository.delete(receita);
            return receita;
        }
    
        @GetMapping("/getTotal")
        public int getTotal() {
            return receita_repository.findAll().size();
        }
    
    }
package com.savemoney.savemoney;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import javax.annotation.PostConstruct;
    import java.util.TimeZone;
    
    @SpringBootApplication
    public class SavemoneyApplication {
        public static void main(String[] args) {
            SpringApplication.run(SavemoneyApplication.class, args);
        }
    
        @PostConstruct
        public void init(){
            // Setting Spring Boot SetTimeZone
            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        }
    }

Front-End:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="sortcut icon" href="view/img/LOGO_SAVEMONEY.png" width="16px" height="16px">
    <title>SAVEMONEY - Receita</title>

    <!-- CSS only -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous">
    <link href="../view/style2.css" rel="stylesheet">
    <!--END-->

</head>
<body>
      <nav class="navbar navbar-expand-lg navbar-light bg-light item2 ">
        <div class="container-fluid">
          <a class="navbar-brand" href="#">SAVEMONEY</a>
          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
          </button>
          <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                <li class="nav-item">
                    <a class="nav-link" href="../Usuario/dashboard.html">Home</a>
                </li>
              <li class="nav-item">
                <a class="nav-link"  href="#">Receita</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="../Usuario/despesa.html">Despesa</a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="../Config/config.html">Configurações</a>
              </li>

              </li>
              <li class="nav-item">
                <a class="nav-link disabled " href="#" tabindex="-1" aria-disabled="true"><input class="item_input" type="submit" value="Sair"></a>
              </li>
            </ul>

          </div>
        </div>
      </nav>
      <div class=" grid1  container_dashboard item2_dashboard">
        <div class="item2_view_geral item2 ">
            <h1>Receitas</h1>
            <table class="table" id="tabela_listar_receitas_1">
                <thead>

                <tr>

                    <th>Nome</th>
                    <th>Valor</th>
                </tr>
                </thead>
                <tbody id="tabela_listar_aluno_tbody_1"></tbody>


            </table>

        </div>
        <div class="item3_dashboard_2 item item3_dashboard item2">

            <h1>Adicionar</h1>

            <div class="alert alert-danger collapse" role="alert" id="div-alert-message">
                <a class="close" onclick="esconderAlert()">×</a>
            </div>

            <form action="../Usuario/receita.html"  class="form-example" id="form-adicionar">
                <div class="form-example">
                  <label for="input_nome_receita">Nome da receita:</label>
                  <input type="text" name="nome_receita" id="input_nome_receita" required>
                </div>
                <div class="form-example">
                  <label for="input_valor_receita">Valor:</label>
                  <input type="number" name="valor_receita" id="input_valor_receita" required>

                </div>
                <div class="form-example">
                    <label for="input_data_receita">Data:</label>
                  <input  class="form-example" type="date" id="input_data_receita">
                </div>
                <div class="form-example">
                    <label for="input_descricao_receita">Descrição:</label>
                    <input type="text" name="descricao_receita" id="input_descricao_receita" required>

                </div>
                <hr>
                <div class="submit_inputs_receita">
                    <input type="submit" value="Adicionar">
                    <!--
                    <input type="submit" value="Editar">
                    <input type="submit" value="Exclur">
                    <input type="submit" value="Cancelar">
                    -->
                </div>
              </form>

        </div>
      </div>





    <!--JQUERY + BOOTSTRAP-->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <!-- JavaScript Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8" crossorigin="anonymous"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
        <script src="../js/listar_receita.js"></script>
        <script src="../js/adicionar_receita.js"></script>
        <script src="../js/savemoney.js"></script>


</body>
</html>

$(document).ready(function (){
    $.ajax({
        url:'http://localhost:8080/api/receita/listar',
        type:'get',
        dataType: 'json',
        success: function(result){
            var html = '';
            $.each(result, function (i, data){
                html += '<tr><td>' + data.id +'</td>';
                html += '<td>' + data.nome_receita +'</td>';
                html += '<td>R$ ' + data.valor_receita +'</td>';
                html += '<td>'+  data.descricao_receita +'</td>';
                html += '<td>' + data.Data_receita +'</td></tr>';
                $("#tabela_listar_aluno_tbody").html(html);
            });
        }
    })
});
$(document).ready(function (){
    $.ajax({
        url:'http://localhost:8080/api/receita/listar',
        type:'get',
        dataType: 'json',
        success: function(result){
            var html = '';
            $.each(result, function (i, data){
                html += '<tr><td>' + data.nome_receita +'</td>';
                html += '<td>R$ ' + data.valor_receita +'</td></tr>';
                $("#tabela_listar_aluno_tbody_1").html(html);
            });
        }
    })
});

//Processar Formulario
$ ('#form-adicionar').submit(function (event){
    event.preventDefault();

    Data_receita = new Date($('#input_data_receita').val());

    //Criar formData
    var formData = {

        'nome': $('#input_nome_receita').val(),
        'valor': $('#input_valor_receita').val(),
        'data': Data_receita.toUTCString(),
        'descricao': $('#input_descricao_receita').val(),
    };

    $.ajax({
        headers : {
            'Accept' : 'application/json',
            'Content-Type' : 'application/json'
        },
        type: 'POST',
        url: 'http://localhost:8080/api/receita/incluir',
        data: JSON.stringify(formData),
        dataType: 'json',
        encode: true,
        success: function(data){
            location.href = 'receita.html';

        },
        error:function (data){
            $('#div-alert-message').prepend(data.responseText);
            $('#div-alert-message').fadeIn();
        }

    });
});

function GetURLParameter(sParam) {
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam)
        {
            return sParameterName[1];
        }
    }
}

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getUTCMonth() + 1),
        day = '' + d.getUTCDate(),
        year = d.getUTCFullYear();

    if (month.length < 2)
        month = '0' + month;
    if (day.length < 2)
        day = '0' + day;

    return [year, month, day].join('-');

}
function formatDateTime(dateTime) {
    var d = new Date(dateTime),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();
    hour = d.getHours();
    minute = d.getMinutes();


    if (month.length < 2)
        month = '0' + month;
    if (day.length < 2)
        day = '0' + day;

    if (hour.length < 2) {
        hour = '0' + hour;
    }

    if (minute.length < 2) {
        minute = '0' + minute;
    }

    dateFormated = [year, month, day].join('-');
    timeFormated = [hour, minute].join(':');

    return [dateFormated, timeFormated].join('T');
}
function esconderAlert() {
    $('#div-alert-message').html("<a class='close' onclick='esconderAlert()'>×</a>");
    $('#div-alert-message').hide();
}

Esse erro deve ter gerado algum stacktrace da exceção no servidor. Vc consegue postar ele aqui?

Seria isso ?


image

Pela stacktrace, vc tentou invocar o método isEmpty() de uma string NULL, retornada pelo método receita.getNome_Receita().

Obrigado. Vou olhar meu código e corrigir.