zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14976842.html
Copyright © 2011-2022 走看看