Spring mvc 将日期添加到数据库时出错
在通过Hibernate将日期从jsp添加到数据库时,我遇到了错误。 如果有人知道这个问题的解决方案,请告诉我。 谢谢你的帮助。下面是我的代码片段 register.jspSpring mvc 将日期添加到数据库时出错,spring-mvc,Spring Mvc,在通过Hibernate将日期从jsp添加到数据库时,我遇到了错误。 如果有人知道这个问题的解决方案,请告诉我。 谢谢你的帮助。下面是我的代码片段 register.jsp <form:input path="date" id="datepicker"/> HelloController.java @Controller @RequestMapping("/library/*") public class HelloController { @RequestMapping(
<form:input path="date" id="datepicker"/>
HelloController.java
@Controller
@RequestMapping("/library/*")
public class HelloController {
@RequestMapping(value="success", method = RequestMethod.POST)
public String addUser(@ModelAttribute("register") Registration register, ModelMap model) {
System.out.println(register.getFirstName());
registerService.addUsers(register);
return "register";
}
}
在将日期从jsp添加到数据库时,我得到了以下错误
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'register' on field 'date': rejected value [25/11/2014]; codes [typeMismatch.register.date,typeMismatch.date,typeMismatch.java.sql.Timestamp,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [register.date,date]; arguments []; default message [date]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Timestamp' for property 'date'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.sql.Timestamp] for property 'date': no matching editors or conversion strategy found]
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:818)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:367)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:659)
问题似乎是时间戳对象和从JSP接收的日期字符串之间的映射 您可以通过以下任一方法解决此问题
public class CustomSerializer extends JsonSerializer<Timestamp> {
@Override
public void serialize(Timestamp date, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
//Now write you code for converting string to TimeStamp Object.
}
}
日期日期=新日期(接收日期作为字符串)
Timestamp Timestamp=新的时间戳(date.getTime())public class CustomSerializer extends JsonSerializer<Timestamp> {
@Override
public void serialize(Timestamp date, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
//Now write you code for converting string to TimeStamp Object.
}
}
公共类CustomSerializer扩展JsonSerializer{
@凌驾
public void serialize(时间戳日期、JsonGenerator jgen、SerializerProvider提供程序)引发IOException、JsonProcessingException{
//现在编写将字符串转换为时间戳对象的代码。
}
}
同样,如果可以使用
java.util.Date
对象而不是TimeStamp
对象,也可以为TimeStamp对象编写JsonDeserializer。下面的代码将解决您的问题
在模型类Registration.java上
import java.sql.Timestamp;
public class Registration {
private Timestamp date;
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;
}
}
import java.util.Date;
public class Registration {
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
@Controller
@RequestMapping("/library/*")
public class HelloController {
@Override
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
@RequestMapping(value="success", method = RequestMethod.POST)
public String addUser(@ModelAttribute("register") Registration register, ModelMap model) {
System.out.println(register.getFirstName());
registerService.addUsers(register);
return "register";
}
}
在控制器类HelloController.java上
import java.sql.Timestamp;
public class Registration {
private Timestamp date;
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;
}
}
import java.util.Date;
public class Registration {
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
@Controller
@RequestMapping("/library/*")
public class HelloController {
@Override
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
@RequestMapping(value="success", method = RequestMethod.POST)
public String addUser(@ModelAttribute("register") Registration register, ModelMap model) {
System.out.println(register.getFirstName());
registerService.addUsers(register);
return "register";
}
}
提交jsp表单后,默认情况下,请求中的所有参数都将是
String
类型。在Spring MVC
中,职责是initBinder
将所有这些字符串值转换为各自的类型,并将其与模型类变量绑定。注册类中的日期变量是TimeStamp类型,其有效数据类似于yyyy-mm-dd hh:mm:ss[.fffffffff]
其中输入的是dd/mm/yyyy
没问题!。很乐意帮忙!:)