SpringMVC框架----SpringMVC的自定义类型转换器

38 篇文章 1 订阅
17 篇文章 2 订阅

上一段我们介绍了请求参数的绑定
SpringMVC请求参数的绑定
在请求参数绑定的时候,有时候会遇到一些问题,如自定义类型转换器异常

1.自定义类型转换器演示异常

现在有一个页面,想给服务器提交数据,现有uname,age,其中age是100.但是往后台提交的东西,100也是作为字符串来出现的,或者只要是页面,提交的任何数据,全部都是字符串类型的。在后台我们可以把数据全部都拿到。如果你提交的是一个字符串的话,后台类型是Integer,程序也没有报错,
springmvc内部中自动的进行了数据类型转换。
String-----Integer
即便字符串转日期,也是可以的,但是格式可能有些问题。
比如2020/11/11.可能会不报错,如果2020-11-11,可能不支持这个格式。
user类中有3个属性,还包括set和get方法,以及tostring方法

private String uname;
private Integer age;
private Date date;

index.jsp

<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="提交"/>
</form>

controller

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

在地址栏中输入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明数据封装出错了,数据没封装进去,控制台没看到执行这个代码,在做类型转换的时候出错了

2.自定义类型转换器代码编写

第一步:定义一个类,实现Converter接口,该接口有两个泛型
public interface Converter<S,T>{
}

(注册好了类型转换器之后,就不会出错了,前端控制器会找类型转换器帮助我们将字符串转换成为我们的日期)
Converter类型转换总接口
Converter有很多实现类
这个接口有两个泛型,前面指的是字符串,后面指的是具体类型
如果T是日期,则字符串转换为日期
注意,导入的是这个包

import org.springframework.core.convert.converter.Converter;

代码


/*把字符串转换为日期*/
public class StringToDateConverter implements Converter<String,Date> {

    @Override
    /*
    * 参数:传入过来的字符串
    * */
    public Date convert(String source) {
        if(source==null){
            throw new RuntimeException("请您传入数据");
        }else{
            DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
            //把字符串转换为日期
            try {
                return df.parse(source);
            } catch (ParseException e) {
                throw new RuntimeException("数据类型转换出现了错误");
            }
        }
    }
}

第二步:在 spring配置文件中配置类型转换器
spring 配置类型转换器的机制是,将自定义的转换器注册到类型转换服务中去。

<!--配置自定义类型转换器-->
<bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <!--我们需要把自己写的类型转换器注册一下-->
    <property name="converters">
        <set>
            <bean class="cn.yujie.utils.StringToDateConverter"/>
        </set>
    </property>
</bean>

第三步:在 annotation-driven标签中引用配置的类型转换服务,让类型转换器生效

<!--开启springmvc框架注解支持-->
<mvc:annotation-driven conversion-service="conversionService"/>

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值