zoukankan      html  css  js  c++  java
  • springMVC4(11)使用注解完毕数据格式化

    需求实例引入

    在实际开发中。我们会经常遇到须要对日期格式、数值格式进行转换的需求。在spring中。我们能够轻松通过注解的方式完毕对数据的格式化处理,比方如今有个User POJO类:
    package com.mvc.model;

    import java.util.Date;
    
    public class Person {
        private String name;
        @DateTimeFormat(pattern = "yyyy-MM-dd")
        private Date birthday;
        @NumberFormat(pattern = "#.###k")
        private Long salary;
    
        //ignore getter and setter
        @Override
        public String toString() {
            return "Person [name=" + name + ", birthday=" + birthday + ", salary="
                    + salary + "]";
        }
    }

    我们希望通过上面两个注解。将birthdat如1995-01-01的字符串形式与java.util.Date的日期形式相互转换,将salary如15.000K的字符串形式与Long型的15000相互转换。
    为了完毕我们的需求。我们须要先了解例如以下知识。

    AnnotationFormatterFactory接口

    它使我们的注解与属性类型关联起来。

    它的定义例如以下:

    public interface AnnotationFormatterFactory<A extends Annotation> {
    
        //通过此方法获取(也能理解为设置)哪些属性类能够被注解A标注
        Set<Class<?

    >> getFieldTypes(); //获取特定属性的格式化输出器 Printer<?> getPrinter(A annotation, Class<?> fieldType); //获取特定属性格式化输入(解析)器 Parser<?

    > getParser(A annotation, Class<?> fieldType); }

    FormattingConversionService

    继承自ConversionService,执行时类型转换和格式化服务接口,提供执行期类型转换和格式化的支持。


    其相应存在一个工厂类FormattingConversionServiceFactoryBean,我们也能够通过其注冊自己定义转换器。

    它的地位相当于我们上一篇文章提到的ConversionServiceFactoryBean。我们将其装配在的conversion-service属性中。

    以下是我们的实例配置:

    <!-- 通过:annotation-driven的conversion-service属性来装配我们的类型转换器 -->
    <mvc:annotation-driven />
    <bean
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean"
        id="converters"><!-- 在属性converters注冊 -->
        <property name="converters">
            <list>
                <bean class="com.mvc.convertor.MyConvertorFactory" />
            </list>
        </property>
    </bean>

    注冊完后,我们就可以进行我们的web測试:

    @Controller
    public class PersonController {
    
        @RequestMapping("convert")
        public void convert( Person person){
            System.out.println(person);
        }
    }

    启动server,我们在游览器中訪问:
    控制台相应输出:http://localhost:8080/springMVC/convert?name=myName&birthday=1995-01-01&salary=5.000k

    Person [name=myName, birthday=Sun Jan 01 00:00:00 CST 1995, salary=5]
    从这里我们看出。成功完毕了请求參数到User对象属性的格式化转换。

    还有一方面,假设我们想单独使用格式转化器,也可直接在方法入參中使用注解,看以下实例:

    @RequestMapping("convert2")
    public void convert2(@DateTimeFormat( pattern = "yyyy-MM-dd") Date date,@NumberFormat( pattern = "#k") Long salary ){
        System.out.println(date);
        System.out.println(salary);
    }

    启动server,我们在游览器中訪问:http://localhost:8080/springMVC/convert?

    name=myName&birthday=1995-01-01&salary=50k
    控制台相应输出:

    Sun Jan 01 00:00:00 CST 1995

  • 相关阅读:
    谷歌分析配置行为事件
    CentOS7.6下模拟iSCSI,Windows来连
    2.CentOS6.5下的DNS主从区域传送配置
    1.CentOS6.5下的基础DNS配置
    CentOS下搭建DHCP服务
    思科设备配置DHCP服务
    思科网络设备配置AAA认证
    vsftpd文件虚拟用户搭建
    Windows网络服务渗透攻击分类
    使用脚本来监控新建进程及其父进程以及他们的命令行
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7256159.html
Copyright © 2011-2022 走看看