SpringMVC中使用conversionSerivce

 

SpringMVC中的ConversionSerivce的作用是把接收的参数以什么“类型”呈现出来。前端传递什么参数我们后台以什么形势接收它们。比如SpringMVC中前端1,我们可以把它当成String或int,使用ConversionSerivce重点是类型,只要在类型不是常用类型的情况下才会调用我们自定义的参数转换器转换参数类型。

第一步:自定义参数类型转换器

注意,只有在参数类型是这个类型时候才会调用该转换器,后面还详细解

import java.sql.Timestamp;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;

import yui.comn.util.DateUtils;

public class TimestampConverter implements Converter<String, Timestamp> {
    @Override
    public Timestamp convert(String timeStr) {
        Timestamp t = null;
        timeStr = timeStr.replace("T", " ");
        if (StringUtils.isNotBlank(timeStr)) {
            try {
                t = DateUtils.covertStrToTimestamp(timeStr, "yyyy-MM-dd HH:mm:ss");
            } catch (Exception e) {
                t = new Timestamp(new Date().getTime());
                e.printStackTrace();
            }
        }
        return t;
    }
}

第二步:配置despatcher-servlet.xml:

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

<bean id="conversionService"
          class="org.springframework.context.support.ConversionServiceFactoryBean">
     <property name="converters">
           <set>
               <bean class="yui.bss.comn.convert.TimestampConverter"></bean>
           </set>
     </property>
</bean>

在mvc:annotation-driven标签里使用conversion-service属性引用我们自定义的参数转换器

第三步:在springMVC接口里使用该转换

上面自定义的转换器是将字符串转换成Timestamp类型,所以只有当传递的参数是字符串且接口里想要的类型是Timestamp是才会调用自定义接口。这里经常有人搞错了,以为每个参数都会经过转换器转换,其实是不对的。
比如如下:

 @RequestMapping(value = "/do1", method = RequestMethod.GET)
    @ResponseBody
    public Object do1(@RequestParam(value="t1") Timestamp t1, @RequestParam(value="t2") String t2) {
        try {
           //业务逻辑
            logger.info(result);
            return result;
        }catch(Throwable e){
            logger.info(e);
        }
   }

接口里需要2个参数,第一个t1类型是Timestamp,第二个t2是String,当我们访问请求时,只有参数名是t1的数据才会进入自定义参数转换器TimestampConverter,t2是不会进入的。因为需要t1参数以Timestamp类型呈现出现,但接收的类型是字符串,所以需要转换,t2需要String类型呈现,接收到的正常是字符串,所以不需要转换,如果定义成int类型,也不需要我们在自定义参数类型转换器的,因为SpringMVC类型了。

第四:总结

使用ConversionSerivce重点是类型”的概念,需要类型做转换,我们自定义的参数类型转换器的泛型即我们需要的类型。比如

TimestampConverter implements Converter<String, Timestamp>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值