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

相關文章
相關標籤/搜索