10.SpringMVC 自定义类型转换器

自定义类型转换器

SpringMVC 默认已经提供了一些常用的类型转换器,例如:客户端提交的字符串转换成int型进行参数设置。

那么如果是时间类型它也会自动转,但是呢 每个国家的时间类型都不一样对吧,你能确保SpringMVC 都给你转吗? 这是不可能的,例如:

package com.bihu.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;

@Controller
public class TestController {

    @RequestMapping("/ok")
    @ResponseBody//直接响应 不进行跳转
    public void TestConverter(Date date){
        System.out.println(date);
    }


    /***
     *      当你访问下面网址时:
     *      成功访问:http://localhost:8080/ok?date=2020/02/03
     *      失败报错:http://localhost:8080/ok?date=2020-02-03
     */
}

所以呢 如果你想是 2020-02-03的这样进来 怎么办:

自定义类型转换器的开发步骤:

① 定义转换器类实现Converter接口

② 在配置文件中声明转换器

③ 在中引用转换器

代码:

1️⃣

package com.bihu.Converter;

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

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//① 定义转换器类实现Converter接口
//实现这个接口 选有泛型的 第一个是你原来的类型 第二个是你要转的类型
public class DateConverter implements Converter<String,Date> {

//convert 是重写的方法 -- 形参是你传进来的字符串
    @Override
    public Date convert(String myDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = sdf.parse(myDate);   //此方法需处理异常
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;    //将转换好的时间 返回去
    }
}

然后:2️⃣ 和 3️⃣

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       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">

    <!--扫描注解-->
    <context:component-scan base-package="com.bihu"/>
<!--  原始容器处理静态资源  -->
    <mvc:default-servlet-handler/>


    <!-- ② 在配置文件中声明转换器:ConversionServiceFactoryBean //转换服务工厂bean
        他的参数是Set 我们吧我们自己的转换器 注入
        记得加ID 引用中引入
    -->
    <bean id="DateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.bihu.Converter.DateConverter"></bean>
            </list>
        </property>
    </bean>

    <!--③ 在<annotation-driven>中引用转换器-->
    <!--驱动注解 在这里引入自定义转换器 [conversion-service] -->
    <mvc:annotation-driven conversion-service="DateConverter" />
</beans>

然后呢 你尝试访问 http://localhost:8080/ok?data=2020-02-03 也可以将 日期制动封装到Date类型了。

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14976842.html

原文地址:https://www.cnblogs.com/bi-hu/p/14976842.html