• 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")

    解决方案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"/>
     1 public class BaseController {
     2     @InitBinder
     3     public void initBinder(WebDataBinder binder) {
     4         /**
     5          * 第一种方式:使用WebDataBinder注册一个自定义的编辑器,编辑器是日期类型
     6          * 使用自定义的日期编辑器,日期格式:yyyy-MM-dd,第二个参数为是否为空   true代表可以为空
     7          */
     8         binder.registerCustomEditor(Date.class, new CustomDateEditor(
     9                 new SimpleDateFormat("yyyy-MM-dd"), true));
    10     }
    11 }

     或者使用下面的方式

     1 public class BaseController {
     2     @InitBinder
     3     public void initBinder(WebDataBinder binder) {
     4         /**
     5          * 方式二:使用WebDataBinder注册一个自定义的编辑器,编辑器是日期类型
     6          * 使用属性编辑器实现:重载setAsText,getAsText
     7          */
     8         binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
     9 
    10             @Override
    11             public String getAsText() {
    12                 return new SimpleDateFormat("yyyy-MM-dd")
    13                         .format((Date) getValue());
    14             }
    15 
    16             @Override
    17             public void setAsText(String text) {
    18                 try {
    19                     setValue(new SimpleDateFormat("yyyy-MM-dd").parse(text));
    20                 } catch (Exception e) {
    21                     e.printStackTrace();
    22                     setValue(null);
    23                 }
    24             }
    25 
    26         });
    27     }
    28 }
  • 相关阅读:
    两个链表的第一个公共节点(Python and C++解法)
    第一个只出现一次的字符(Python and C++解法)
    丑数(Python and C++解法)
    最长不含重复字符的子字符串(Python and C++解法)
    礼物的最大值(Python and C++解法)
    把数字翻译成字符串(Python and C++解法)
    连续子数组的最大和(Python and C++解法)
    最小的k个数(Python and C++解法)
    数组中出现次数超过一半的数字(Python and C++解法)
    字符串的排列(Python and C++解法)
  • 原文地址:https://www.cnblogs.com/wiseroll/p/7074070.html
Copyright © 2020-2023  润新知