Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 将日期添加到数据库时出错_Spring Mvc - Fatal编程技术网

Spring mvc 将日期添加到数据库时出错

Spring mvc 将日期添加到数据库时出错,spring-mvc,Spring Mvc,在通过Hibernate将日期从jsp添加到数据库时,我遇到了错误。 如果有人知道这个问题的解决方案,请告诉我。 谢谢你的帮助。下面是我的代码片段 register.jsp <form:input path="date" id="datepicker"/> HelloController.java @Controller @RequestMapping("/library/*") public class HelloController { @RequestMapping(

在通过Hibernate将日期从jsp添加到数据库时,我遇到了错误。 如果有人知道这个问题的解决方案,请告诉我。 谢谢你的帮助。下面是我的代码片段

register.jsp

<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接收的日期字符串之间的映射

您可以通过以下任一方法解决此问题

  • 将Register类日期变量类型更改为String类型,稍后在服务或DAO层中,您可以将其转换为如下所示的TimeStamp对象

    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())

  • 或者您可以编写JSON序列化程序。首先用JSONSerialize注释日期变量

    @JsonSerialize(使用=CustomSerializer.class)

    私有时间戳日期

  • 在提供CustomSerializer类的实现之后,如下所示

    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
    没问题!。很乐意帮忙!:)