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

  • 相关阅读:
    线性代数思维导图——3.向量
    微分中值定理的基础题型总结
    构造函数
    Python课程笔记(七)
    0241. Different Ways to Add Parentheses (M)
    0014. Longest Common Prefix (E)
    0013. Roman to Integer (E)
    0011. Container With Most Water (M)
    0010. Regular Expression Matching (H)
    0012. Integer to Roman (M)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7256159.html
Copyright © 2011-2022 走看看