SpringMVC 自定义类型转换器

2020-04-07  本文已影响0人  阿杰_96c5

1 使用场景:

时间格式: 2020-01-01 无法实现类型由String到Date的直接转换
实体类:

public class User implements Serializable {

    private String uname;

    private Integer age;

    private Date date;
}

jsp 代码:

<%--自定类型转换器 时间格式: 2020-01-01--%>
<form action="param/saveUser" method="post">

    用户姓名: <input type="text" name="uname"><br/>
    用户年龄: <input type="text" name="age"><br/>
    生日: <input type="text" name="date"><br/>

    <input type="submit" value="提交"><br/>
</form>

控制器代码:

/**
     * 自定义类型转换器
     * @param user
     * @return
     */
    @RequestMapping("saveUser")
    public String saveUser(User user){
        System.out.println("执行了...");
        System.out.println(user);
        return "success";
    }
    

报错:

Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'

2 使用步骤

1 自定义类型转换器,实现 Converter 接口,该接口有两个泛型
/**
 * 字符串转换日期
 */
public class StringTpDateConverter implements Converter<String, Date> {


    @Override
    public Date convert(String s) {
        if(s == null){
            throw new RuntimeException("请您传入数据");
        }
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        // 把字符串转换成日
        try {
            return df.parse(s);
        } catch (ParseException e) {
            throw new RuntimeException("数据转换出现错误");
        }
    }
}
2 注册自定义类型转换器,在springmvc.xml配置文件中编写配置
<!-- 配置自定义转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters" >
        <set>
            <bean class="org.example.utils.StringTpDateConverter"></bean>
        </set>
    </property>
</bean>
3 在 annotation-driven 标签中引用配置的类型转换服务
<!-- 配置spring开启注解mvc的支持-->
<!-- 引用自定义类型转换器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

上一篇 下一篇

猜你喜欢

热点阅读