No curso foi apresentado um filto usando String, estou tentando filtrar por data usando o LocalDate mas esta me retornando um erro quando digito o seguinte na URL: http://localhost:8080/transacoes?dataDaTransacao=2019-05-05
Mensagem de erro:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue Jul 30 06:54:07 BRT 2019 There was an unexpected error (type=Internal Server Error, status=500). No primary or default constructor found for class java.time.LocalDate
A seguir o Codigo da Class Controller
ackage com.bytebank.gestaodegastos.controller;
import java.time.LocalDate;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.bytebank.gestaodegastos.controller.dto.TransacaoDto;
import com.bytebank.gestaodegastos.modelo.Transacao;
import com.bytebank.gestaodegastos.repository.TransacaoRepository;
@Controller
@RestController
public class TransacoesController {
@Autowired
private TransacaoRepository transacaoRepository;
@RequestMapping("/transacoes")
public List<TransacaoDto> lista(LocalDate dataDaTransacao) {
System.out.println(dataDaTransacao);
if(dataDaTransacao == null) {
List<Transacao> transacao = transacaoRepository.findAll();
return TransacaoDto.converter(transacao);
}else {
List<Transacao> transacao = transacaoRepository.findByDataDaTransacao(dataDaTransacao);
return TransacaoDto.converter(transacao);
}
}
}
o Codigo do repository
package com.bytebank.gestaodegastos.repository;
import java.time.LocalDate;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.web.bind.annotation.PathVariable;
import com.bytebank.gestaodegastos.modelo.Transacao;
public interface TransacaoRepository extends JpaRepository<Transacao, Long>{
List<Transacao> findByDataDaTransacao(@PathVariable("dataDaTransacao") LocalDate dataDaTransacao);
}
O codigo do model:
package com.bytebank.gestaodegastos.modelo;
import java.time.LocalDate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Transacao {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String descricao;
private double valor;
private LocalDate dataDaTransacao = LocalDate.now();
@ManyToOne
private Usuario codigoUsuaio;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Transacao other = (Transacao) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public Usuario getCodigoUsuaio() {
return codigoUsuaio;
}
public void setCodigoUsuaio(Usuario codigoUsuaio) {
this.codigoUsuaio = codigoUsuaio;
}
public LocalDate getData() {
return dataDaTransacao;
}
public void setData(LocalDate dataDaTransacao) {
this.dataDaTransacao = dataDaTransacao;
}
}