源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-10-02 05:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题
[b]页面报错:[/b] [img]http://files.jb51.net/file_images/article/201706/201706251119232.png[/img] [b]后台错误:[/b] 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] [b]解决方案1:在对应的实体类属性上加入 @DateTimeFormat(pattern = "yyyy-MM-dd")[/b] [img]http://files.jb51.net/file_images/article/201706/201706251119233.png[/img] [b]解决方案2:不使用 <mvc:annotation-driven/>注解[/b] [b]使用 DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 注解驱动配置 [/b] [b]在对应的实体类属性上加入 @DateTimeFormat(pattern = "yyyy-MM-dd")[/b]
<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>
[b]3、使用 @InitBinder注解,注册一个父类Controller(BaseController),其他Controller去继承它[/b]
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)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部