I'm developing an application with Spring MVC 4. And I'm getting this error "Status 400 - The request sent by the client was syntactically incorrect". As I researched the internet, I saw that this is because Spring can not make the link between the received types. I've also seen ways to resolve this issue using @InitBinder, Converter or PropertyRegister, but the examples focus a lot on using the java.util.Date type only I'm using java.time.Localdate in my JavaBean. So I would like to know if it is possible to use @InitBinder with LocalDate? Or if the DataBinding is only going to be able to get the input "date" in jsp and turn it into Date? Here is the code:
Register Patient.jsp
<form role="form" action="adicionaPaciente" method="post" id="form1">
<main class="tab-content">
<ul class="nav nav-tabs" role="tablist">
<li><a href="#aba1" role="tab" data-toggle="tab">Dados Pessoais</a></li>
<li><a href="#aba2" role="tab" data-toggle="tab">Dados Médicos</a></li>
<li><a href="#aba3" role="tab" data-toggle="tab">Histórico de Procedimentos</a></li>
</ul>
<div role="tabpanel" class="tab-pane active" id="aba1">
<div class="box-header with-border">
<h3 class="box-title col-md-12">Dados Pessoais</h3>
</div>
<!-- /.box-header -->
<div class="form-row">
<div class="form-group col-md-6">
<label>Nome do Paciente</label>
<input type="text" class="form-control" placeholder="Nome" required="true" name="nome_paciente">
</div>
<div class="form-group col-md-2">
<label>CPF</label>
<input type="text" class="form-control" required="true" placeholder="CPF" name="cpf">
</div>
<div class="form-group col-md-2">
<label>RG</label>
<input type="text" class="form-control" required="true" placeholder="RG" name="rg">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-2">
<label>Data de Nascimento</label>
<input type="date" class="form-control" required="true" placeholder="Data de Nascimento" name="data_nasc">
</div>
<div class="form-group col-md-3">
<label>Email</label>
<input type="email" class="form-control" placeholder="Email" required="true" name="email">
</div>
<div class="form-group col-md-2">
<label>Sexo</label>
<select class="form-control" name="sexo">
<option value="masculino">Masculino </option>
<option value="feminino">Feminino</option>
</select>
</div>
<div class="form-group col-md-2">
<label>Estado Civil</label>
<select class="form-control" name="estado_civil">
<option value="solteiro(a)">Solteiro(a)</option>
<option value="casado(a)">Casado(a)</option>
<option value="divorciado(a)">Divorciado(a)</option>
<option value="viuvo(a)">Viúvo(a)</option>
</select>
</div>
<div class="form-group col-md-5">
<label>Nome do Cônjuge</label>
<input type="text" class="form-control" placeholder="Nome do Cônjuge" name="nome_conjuge">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4">
<label>Endereço</label>
<input type="text" class="form-control" required="true" placeholder="Endereço" name="endereco">
</div>
<div class="form-group col-md-3">
<label>Bairro</label>
<input type="text" class="form-control" required="true" placeholder="Bairro" name="bairro">
</div>
<div class="form-group col-md-3">
<label>Cidade</label>
<input type="text" class="form-control" required="true" placeholder="Cidade" name="cidade">
</div>
<div class="form-group col-md-2">
<label>CEP</label>
<input type="text" class="form-control" required="true" placeholder="CEP" name="cep">
</div>
</div>
</div>
<!-- /.tabpanel 1 -->
<div role="tabpanel" class="tab-pane" id="aba2">
<div class="box-header with-border">
<h3 class="box-title col-md-12">Dados Médicos</h3>
</div>
<!-- /.box-header -->
<div class="form-row">
<div class="form-group col-md-3">
<label>Estado de Saúde</label>
<input type="text" class="form-control" required="true" placeholder="Estado de saúde" name="estado_saude">
</div>
<div class="form-group col-md-2">
<label>Alergias</label>
<select class="form-control" name="tem_alergias">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
<div class="form-group col-md-3">
<label>Quais Alergias?</label>
<input type="text" class="form-control" placeholder="Alergias" name="alergias">
</div>
<div class="form-group col-md-2">
<label>Diabetes?</label>
<select class="form-control" name="tem_diabetes">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
<div class="form-group col-md-2">
<label>Bebe?</label>
<select class="form-control" name="bebe">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-3">
<label>Problemas Respiratórios?</label>
<select class="form-control" name="tem_prob_resp">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
<div class="form-group col-md-3">
<label>Quais Problemas?</label>
<input type="text" class="form-control" placeholder="Problemas" name="prob_resp">
</div>
<div class="form-group col-md-2">
<label>Cirurgia Prévia?</label>
<select class="form-control" name="cirurgia_previa">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
<div class="form-group col-md-2">
<label>Quais Cirurgias?</label>
<input type="text" class="form-control" placeholder="Cirurgias" name="cirurgias">
</div>
<div class="form-group col-md-2">
<label>Fuma?</label>
<select class="form-control" name="fuma">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-3">
<label>Problemas Circulatórios?</label>
<select class="form-control" name="tem_prob_circ">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
<div class="form-group col-md-3">
<label>Quais Problemas?</label>
<input type="text" class="form-control" placeholder="Problemas" name="prob_circ">
</div>
<div class="form-group col-md-3">
<label>Faz uso de algum medicamento?</label>
<select class="form-control" name="usa_medicamento">
<option value="0">Não</option>
<option value="1">Sim</option>
</select>
</div>
<div class="form-group col-md-3">
<label>Quais Medicamentos?</label>
<input type="text" class="form-control" placeholder="Medicamentos" name="medicamentos">
</div>
</div>
</div>
<!-- /.tabpanel 2 -->
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous" id="previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li><a href="#aba1" role="tab" data-toggle="tab">1</a></li>
<li><a href="#aba2" role="tab" data-toggle="tab">2</a></li>
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
<input type="submit" class="btn btn-success pull-right" value="Cadastrar"/>
<a href="listarPacientes" role="button" class="btn btn-danger pull-right">Cancelar</a>
</main>
<!-- /.tab-content -->
</form>
<!-- /.form1 -->
Patient.java
package model;
import java.time.LocalDate;
public class Paciente {
private int id_paciente;
private String nome_paciente;
private String cpf;
private String rg;
private String email;
private LocalDate data_nasc;
private String sexo;
private String estado_civil;
private String nome_conjuge;
private String endereco;
private String bairro;
private String cidade;
private String cep;
private String estado_saude;
private boolean tem_alergia;
private String alergias;
private boolean tem_diabetes;
private boolean bebe;
private boolean tem_prob_resp;
private String prob_resp;
private boolean cirurgia_previa;
private String cirurgias;
private boolean fuma;
private boolean tem_prob_circ;
private String prob_circ;
private boolean usa_medicamentos;
private String medicamentos;
public int getId_paciente() {
return id_paciente;
}
public void setId_paciente(int id_paciente) {
this.id_paciente = id_paciente;
}
public String getNome_paciente() {
return nome_paciente;
}
public void setNome_paciente(String nome_paciente) {
this.nome_paciente = nome_paciente;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public LocalDate getData_nasc() {
return data_nasc;
}
public void setData_nasc(LocalDate data_nasc) {
this.data_nasc = data_nasc;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getEstado_civil() {
return estado_civil;
}
public void setEstado_civil(String estado_civil) {
this.estado_civil = estado_civil;
}
public String getNome_conjuge() {
return nome_conjuge;
}
public void setNome_conjuge(String nome_conjuge) {
this.nome_conjuge = nome_conjuge;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getEstado_saude() {
return estado_saude;
}
public void setEstado_saude(String estado_saude) {
this.estado_saude = estado_saude;
}
public boolean isTem_alergia() {
return tem_alergia;
}
public void setTem_alergia(boolean tem_alergia) {
this.tem_alergia = tem_alergia;
}
public String getAlergias() {
return alergias;
}
public void setAlergias(String alergias) {
this.alergias = alergias;
}
public boolean isTem_diabetes() {
return tem_diabetes;
}
public void setTem_diabetes(boolean tem_diabetes) {
this.tem_diabetes = tem_diabetes;
}
public boolean isBebe() {
return bebe;
}
public void setBebe(boolean bebe) {
this.bebe = bebe;
}
public boolean isTem_prob_resp() {
return tem_prob_resp;
}
public void setTem_prob_resp(boolean tem_prob_resp) {
this.tem_prob_resp = tem_prob_resp;
}
public String getProb_resp() {
return prob_resp;
}
public void setProb_resp(String prob_resp) {
this.prob_resp = prob_resp;
}
public boolean isCirurgia_previa() {
return cirurgia_previa;
}
public void setCirurgia_previa(boolean cirurgia_previa) {
this.cirurgia_previa = cirurgia_previa;
}
public String getCirurgias() {
return cirurgias;
}
public void setCirurgias(String cirurgias) {
this.cirurgias = cirurgias;
}
public boolean isFuma() {
return fuma;
}
public void setFuma(boolean fuma) {
this.fuma = fuma;
}
public boolean isTem_prob_circ() {
return tem_prob_circ;
}
public void setTem_prob_circ(boolean tem_prob_circ) {
this.tem_prob_circ = tem_prob_circ;
}
public String getProb_circ() {
return prob_circ;
}
public void setProb_circ(String prob_circ) {
this.prob_circ = prob_circ;
}
public boolean isUsa_medicamentos() {
return usa_medicamentos;
}
public void setUsa_medicamentos(boolean usa_medicamentos) {
this.usa_medicamentos = usa_medicamentos;
}
public String getMedicamentos() {
return medicamentos;
}
public void setMedicamentos(String medicamentos) {
this.medicamentos = medicamentos;
}
}
PatientController.java
package controller;
import java.sql.Connection;
import java.util.List;
import java.time.LocalDate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import dao.PacienteDao;
import model.Paciente;
import dao.ConnectionFactory;
@Controller
@RequestMapping("pacientes/")
public class PacienteController {
@RequestMapping("novoPaciente")
public String novoPaciente() {
return "pacientes/cadastrarPaciente";
}
Connection connection = new ConnectionFactory().getConnection();
@RequestMapping("adicionaPaciente")
public String adiciona(Paciente paciente) {
PacienteDao dao = new PacienteDao(connection);
dao.adiciona(paciente);
return "listarPacientes";
}
@RequestMapping("listarPacientes")
public ModelAndView listar() {
PacienteDao dao = new PacienteDao(connection);
List<Paciente> pacientes = dao.getLista();
ModelAndView modelAndView = new ModelAndView("pacientes/listarPacientes");
modelAndView.addObject("pacientes", pacientes);
return modelAndView;
}
@RequestMapping("removerPaciente")
public String remover(Paciente paciente) {
PacienteDao dao = new PacienteDao(connection);
dao.remove(paciente);
return "redirect:listarPacientes";
}
@RequestMapping("detalharPaciente")
public ModelAndView detalhar(int id_paciente) {
PacienteDao dao = new PacienteDao(connection);
Paciente paciente = dao.detalha(id_paciente);
ModelAndView modelAndView = new ModelAndView("pacientes/detalharPaciente");
modelAndView.addObject("paciente", paciente);
return modelAndView;
}
@RequestMapping("alterarPaciente")
public String alterar(Paciente paciente) {
PacienteDao dao = new PacienteDao(connection);
dao.altera(paciente);
return "pacientes/listarPacientes";
}
}