使用AnnotatinFormatterFactory格式化数据

之前的例子使用手工代码实现Formatter接口或在XML配置文件中对Spring提供的Formatter接口的实现类进行对象数据输入输出的格式化工作,但是现在这种硬编码的格式化方式显然已经过时了.Spring为开发者提供了注释驱动的属性对象格式化功能:在Bean属性中设置,SpringMVC处理方法参数绑定数据,模型数据输出时自动通过注释应用格式化的功能.
在org.springframework.format.annotation包顶定义了两个格式化的注释类型:
1.DateTimeFormat
@DataTimeFormat注释可以对java.util.Date,java.util.Calendar等时间类型的属性进行标注.他支持以下几个互斥属性,具体说明如下:
ISO
类型为DateTimeFormater.ISO以下是几个常用的可选值:
DateTimeFormat.ISO.DATE:格式为yyyy-MM-dd
DateTimeFormat.ISO.DATE_TIME:格式为yyyy-MM-dd hh:mm:ss .SSSZ
DateTimeFormat.ISO.TIME:格式为 hh:mm:ss SSSZ
DateTimeFormat.ISO.NONE:表示不使用ISO格式的时间
pattern
类型为String,使用自定义的时间格式化字符串,如”yyyy-MM-dd hh:mm:ss”
style
类型为String,通过样式指定日期的格式,由两位字符组成,第1位表示日期的样式,第2位表示时间的格式,以下是几个常用的可选值:
S:短日期/时间的样式
M:中日期/时间的样式
L:长日期/时间的样式
F:完整日期/时间的样式
-:忽略日期/时间的样式
2.NumberFormat
@NumberFormat可对类似数字类型的属性进行标注,它拥有两个互斥的属性,具体说明如下:
pattern
类型为String,使用自定义的数值格式化串,如”##,###.##”
style
类型为NumberFormat.Style,以下是几个常用的可选值:
NumberFormat.CURRENCY:货币类型
NumberFormat.NUMBER:正常数字类型
NumberFormat.PERCENT:百分数类型
1.表单视图
    <h2>格式化数据</h2>
    <form action="/springTest/testData" method="post">
        日期类型:<input type="text" name="birthday" /><br>
        整数类型:<input type="text" name="total" /><br>
        百分数类型:<input type="text" name="discount" /><br>
        货币类型:<input type="text" name="money" /><br>
        <input type="submit" />
    </form>
2.模型
public class TestData implements Serializable
{
    //日期类型
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date birthday;
    //整数类型
    @NumberFormat(style=Style.NUMBER,pattern="#,###")
    private int total;
    //百分数类型
    @NumberFormat(style=Style.PERCENT)
    private double discount;
    //货币类型
    @NumberFormat(style=Style.CURRENCY)
    private double money;
    
    public TestData()
    {
        super();
    }
...
3.控制器
@Controller
public class TestDataController
{
    @GetMapping("/testData")
    public String testData()
    {
        return "Form6";
    }
    
    @PostMapping("/testData")
    public String commit(
            @ModelAttribute TestData testData,
            Model model
            )
    {
        model.addAttribute("testData",testData);
        return "testDataResult";
    }
}
4.视图显示结果
    <h2>格式化数据:结果</h2>
    <form:form modelAttribute="testData" action="/springTest/testData" method="post">
        日期类型:<form:input path="birthday" /><br>
        整数类型:<form:input path="total" /><br>
        百分数类型:<form:input path="discount" /><br>
        货币类型:<form:input path="money" /><br>
    </form:form>

格式化前:

格式化后: