springMVC4(11)使用注解完毕数据格式化

需求实例引入

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

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相互转换。
为了完毕咱们的需求。咱们需要先了解例如如下知识。web

AnnotationFormatterFactory接口

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

它的定义例如如下:markdown

app

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

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

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

FormattingConversionService

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


其相应存在一个工厂类FormattingConversionServiceFactoryBean,咱们也可以经过其注冊本身定义转换器。post

它的地位至关于咱们上一篇文章提到的ConversionServiceFactoryBean。咱们将其装配在的conversion-service属性中。spa

如下是咱们的实例配置:code

<!-- 经过: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

相关文章
相关标签/搜索