spring mvc中的转换数据类型

use*_*612 4 spring spring-mvc

我的Spring MVC有问题.

@RequestMapping(value = "/novo", method = RequestMethod.GET)
public ModelAndView novoTimeSheet() {
    return new ModelAndView("timesheetcrud/novo", "timesheet", new TimeSheet());
}
Run Code Online (Sandbox Code Playgroud)

我的TimeSheet班级有:

@NotNull(message = "timesheet.cadastro.horainicio.obrigatorio")
@Temporal(TemporalType.TIME)
@Column(name = "INICIO", nullable = false)
private Date horaInicio;

@NotNull(message = "timesheet.cadastro.horafim.obrigatorio")
@Temporal(TemporalType.TIME)
@Column(name = "FIM", nullable = false)
private Date horaFim;
Run Code Online (Sandbox Code Playgroud)

我的addTimeSheet:

@RequestMapping(value = "/addtimesheet", method = RequestMethod.POST)
public String addTimeSheet(@ModelAttribute("timesheet")TimeSheet timeSheet,
                         ModelMap model) {
Run Code Online (Sandbox Code Playgroud)

在浏览器中,当我放置不相等的日期时,我有这个错误:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'timesheet' on field 'horaFim': rejected value [lala]; 
codes [typeMismatch.timesheet.horaFim,typeMismatch.horaFim,typeMismatch.java.util.Date,typeMismatch]; 
arguments [
  org.springframework.context.support.DefaultMessageSourceResolvable: codes [timesheet.horaFim,horaFim]; 
  arguments []; 
  default message [horaFim]
]; 
default message [
  Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'horaFim'; 
  nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull @javax.persistence.Temporal @javax.persistence.Column java.util.Date for value 'lala'; 
  nested exception is java.lang.IllegalArgumentException
]
Field error in object 'timesheet' on field 'horaInicio': rejected value [teste]; 
codes [typeMismatch.timesheet.horaInicio,typeMismatch.horaInicio,typeMismatch.java.util.Date,typeMismatch]; 
arguments [
  org.springframework.context.support.DefaultMessageSourceResolvable: codes [timesheet.horaInicio,horaInicio]; 
  arguments []; 
  default message [horaInicio]
]; 
default message [
  Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'horaInicio'; 
  nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @javax.validation.constraints.NotNull @javax.persistence.Temporal @javax.persistence.Column java.util.Date for value 'teste'; 
  nested exception is java.lang.IllegalArgumentException
]
Run Code Online (Sandbox Code Playgroud)

我该怎么做?期待Date但是我投入String了现场,我想在我的控制器之前验证.

Dan*_*tus 10

你需要为你的Controller添加一些绑定,例如:

@InitBinder
protected void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
Run Code Online (Sandbox Code Playgroud)