加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

关于SpringMVC前台日期作为实体类对象参数类型转换错误处理

发布时间:2021-11-15 13:36:25 所属栏目:PHP教程 来源:互联网
导读:关于SpringMVC前台日期作为实体类对象参数类型转换错误解决方法,页面报错如下: 后台错误: Field error in object user on field birthday: rejected value [2013-06-24]; codes [typeMismatch.user.birthday,typeMismatch.birthday,typeMismatch.Java.uti

关于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"/>
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);
                }
            }
 
        });
    }
}

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读