解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题

作者:jingxian 时间:2023-11-28 20:53:42 

页面报错:

解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题

后台错误:

Field error in object 'user' on field 'birthday': rejected value [2013-06-24]; codes [typeMismatch.user.birthday,typeMismatch.birthday,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.birthday,birthday]; arguments []; default message [birthday]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'birthday'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type java.util.Date for value '2013-06-24'; nested exception is java.lang.IllegalArgumentException]

解决方案1:在对应的实体类属性上加入 @DateTimeFormat(pattern = "yyyy-MM-dd")

解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题

解决方案2:不使用 <mvc:annotation-driven/>注解

使用 DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 注解驱动配置

在对应的实体类属性上加入 @DateTimeFormat(pattern = "yyyy-MM-dd")


<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
   <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
     <property name="webBindingInitializer">
       <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
         <property name="conversionService">
           <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean"/>
         </property>
       </bean>
     </property>
   </bean>

3、使用 @InitBinder注解,注册一个父类Controller(BaseController),其他Controller去继承它


Springmvc配置文件

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
   <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

public class BaseController {
 @InitBinder
 public void initBinder(WebDataBinder binder) {
   /**
    * 第一种方式:使用WebDataBinder注册一个自定义的编辑器,编辑器是日期类型
    * 使用自定义的日期编辑器,日期格式:yyyy-MM-dd,第二个参数为是否为空  true代表可以为空
    */
   binder.registerCustomEditor(Date.class, new CustomDateEditor(
       new SimpleDateFormat("yyyy-MM-dd"), true));
 }
}

或者使用下面的方式


public class BaseController {
 @InitBinder
 public void initBinder(WebDataBinder binder) {
   /**
    * 方式二:使用WebDataBinder注册一个自定义的编辑器,编辑器是日期类型
    * 使用属性编辑器实现:重载setAsText,getAsText
    */
   binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {

@Override
     public String getAsText() {
       return new SimpleDateFormat("yyyy-MM-dd")
           .format((Date) getValue());
     }

@Override
     public void setAsText(String text) {
       try {
         setValue(new SimpleDateFormat("yyyy-MM-dd").parse(text));
       } catch (Exception e) {
         e.printStackTrace();
         setValue(null);
       }
     }

});
 }
}
标签:springmvc,类型转换,日期
0
投稿

猜你喜欢

  • Java单例模式的8种写法(推荐)

    2023-01-06 14:23:27
  • C#图像边缘检测(Roberts)的方法

    2022-12-26 15:11:18
  • C#中的高效IO库System.IO.Pipelines

    2022-11-16 03:43:06
  • Java中synchronized关键字修饰方法同步的用法详解

    2022-03-05 07:11:22
  • JavaBean和Map转换封装类的方法

    2023-04-18 06:50:52
  • 浅谈Java内省机制

    2021-06-13 17:54:05
  • Kotlin 高阶函数与Lambda表达式示例详解

    2021-06-18 08:58:15
  • C#基于WinForm实现串口通讯

    2023-12-26 02:03:39
  • C# Record构造函数的行为更改详解

    2022-01-21 04:50:11
  • Spring从@Aspect到Advisor使用演示实例

    2022-11-21 11:42:08
  • 论Java Web应用中调优线程池的重要性

    2023-06-13 04:56:27
  • Spring Boot实现JWT token自动续期的实现

    2022-02-12 03:48:40
  • C# WinForm打开PDF文件并在窗体中显示

    2023-11-14 10:47:49
  • Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程

    2023-11-15 21:47:05
  • Android系统服务概览

    2022-02-25 06:31:34
  • spring boot使用自定义的线程池执行Async任务

    2023-08-15 07:41:25
  • Android仿开心消消乐大树星星无限循环效果

    2021-10-04 07:19:06
  • Maven+SSM框架实现简单的增删改查

    2023-11-16 17:14:38
  • C#如何给枚举类型增加一个描述特性详解

    2022-08-17 15:02:43
  • Unity实现主角移动与摄像机跟随

    2023-09-14 09:32:05
  • asp之家 软件编程 m.aspxhome.com