SpringMVC(五)-自定义类型转换器和原生ServletAPI对象的获取及使用

一、自定义类型转换器

表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,因为Spring框架内部会默认进行数据类型转换。

但是并不能覆盖所有的类型转换,比如字符串转为日期类型,框架只能转换 "2021/1/27" 格式的,无法转换 "2021-01-27" 格式的,这时可以使用自定义类型转换器。

1、定义一个类型转换器类,必须实现Converter<S, T>接口,该接口有两个泛型,S表示接收的类型,T表示目标类型。

public class StringToDateConverter implements Converter<String, Date> {
    /** 
     * 用于把String类型转成日期类型 
     */ 
    @Override 
    public Date convert(String source) { 
        DateFormat format = null; 
        try { 
                if(StringUtils.isEmpty(source)) { 
                    throw new NullPointerException("请输入要转换的日期"); 
                } 
                format = new SimpleDateFormat("yyyy-MM-dd"); 
                Date date = format.parse(source); return date; 
            } catch (Exception e) { 
                throw new RuntimeException("输入日期有误"); 
            } 
    }
}

2、在springmvc.xml文件中配置类型转换器。

<!-- 注册自定义类型转换器 -->
<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">

    <!-- 给工厂注入自定义的类型转换器 -->
    <property name="converters">
        <set>
            <bean class="cn.itcast.utils.StringToDateConverter"/>
        </set>
    </property>
</bean>

<!-- 开启SpringMVC框架注解的支持、自定义转换类型功能 -->
<mvc:annotation-driven conversion-service="conversionService"/>

 

二、原生ServletAPI对象的获取及使用

SpringMVC还支持使用原始ServletAPI对象作为控制器方法的参数。

支持原始ServletAPI对象有: HttpServletRequest、HttpServletResponse、HttpSession、java.security.Principal、Locale、InputStream、OutputStream、Reader、Writer。

我们可以把上述对象,直接写在控制的方法参数中使用。

    @Controller("testController") 
    @RequestMapping("/test")
    public class TestController {
    
        @RequestMapping("/testServletAPI")
        public String testServletAPI(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
            System.out.println(request);
            System.out.println(response);
            System.out.println(session); 
            return "success";
        }    
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值