Spring MVC数据绑定400错误

错误如图,客户端的请求有语法错误,则意味着数据绑定出现了问题

public class User {
    private String name;
    private String lastname;
    private String password;
    private String detail;
    private Date birthDate;
    private String gender;
    private String country;
    private boolean nonSmoking;

此时出现该错误是因为bean中有Date类型的数据,但是Spring MVC并不能把前端的String类型转换为Date类型

解决办法:

1.使用注解

在bean中的Date字段上加如下注解

@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthDate;

同时在SpringMVC的配置文件中添加

xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd"

<mvc:annotation-driven />

mvc声明用http://www.springframework.org/schema/mvc/spring-mvc.xsd这个文件来解析,如果使用上述注解,必须加标红的配置

上述注解的作用:

1)会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。
2)数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)

这样就可以了,简答到没朋友。

但是这个问题折磨了我好久,就是因为没写<mvc:annotation-driven />........

2.使用自定义参数绑定(converter转换器方式)

1)编写响应的converter,实现固定接口:

第一个参数是原始类型,第二个参数是转换后的类型
public class CustomDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String s) {
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}

2)在springmvc.xml配置文件配置格式化转换服务工厂bean:FormattingConversionServiceFactoryBean

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="xyz.zhulei.spring_mybatis.controller.convert.CustomDateConverter"/>
            </list>
        </property>
    </bean>

3)
<mvc:annotation-driven conversion-service="conversionService"/>

大功告成,就可以自动完成string到date的转换了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值