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

简介: <div class="markdown_views"><h1 id="需求实例引入">需求实例引入</h1><p>在实际开发中,我们会常常遇到需要对日期格式、数值格式进行转换的需求。在spring中,我们可以轻松通过注解的方式完成对数据的格式化处理,比如现在有个User POJO类: <br>package com.mvc.model;</p><pre cla

需求实例引入

在实际开发中,我们会常常遇到需要对日期格式、数值格式进行转换的需求。在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 + "]";
    }
}
AI 代码解读

我们希望通过上面两个注解,将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);
}
AI 代码解读

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>
AI 代码解读

注册完后,我们即可进行我们的web测试:

@Controller
public class PersonController {

    @RequestMapping("convert")
    public void convert( Person person){
        System.out.println(person);
    }
}
AI 代码解读

启动服务器,我们在游览器中访问:
控制台对应输出: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);
}
AI 代码解读

启动服务器,我们在游览器中访问:http://localhost:8080/springMVC/convert?name=myName&birthday=1995-01-01&salary=50k
控制台对应输出:

Sun Jan 01 00:00:00 CST 1995

目录
打赏
0
0
0
0
58
分享
相关文章
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
125 0
SpringMVC的注解、参数传递、页面跳转
SpringMVC的注解、参数传递、页面跳转
110 0
39SpringMVC - 注解映射器和适配器
39SpringMVC - 注解映射器和适配器
76 0
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
85 4
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
289 2
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
98 2
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
193 0
SpringMVC入门到实战------3、@RequestMapping注解(超详细基础知识+实际代码案例)
该博客文章详细介绍了SpringMVC中`@RequestMapping`注解的使用方法,包括其功能、位置、value属性、method属性、params属性、headers属性以及支持的路径风格和占位符,并通过实际代码案例展示了如何建立请求与控制器方法之间的映射关系。
SpringMVC入门到实战------3、@RequestMapping注解(超详细基础知识+实际代码案例)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等