定义
数据格式化也属于类型转换的范畴。
Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该实现类即有类型转换的功能,也有格式化的功能。这个实现类拥有一个工厂FormattingConversionServiceFactoryBean工厂类,该工厂类就是用于Spring中构造FormattingConversionService实现类的。
该工厂类已经在内部注册了:
- @NumberFormat注解:用于进行数字类型的格式化
- @DateFormat注解:用来进行日期类型的格式化(可以解决字符串转换为Date类型的问题 )
例题:Student中加入salary和birthday属性,需要对工资和生日进行格式化
- Student中加入salary和birthday属性,并且制定格式化类型
public class Student {
private String name;
private String sex;
private Integer age;
@NumberFormat(pattern="#,###,###.#")
private Double salary;
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", salary=" + salary + ", birthday="
+ birthday + "]";
}
}
- springmvc.xml配置
<!--
mvc:annotation-driven : 开启对springmvc注解的支持
conversion-service : 配置SpringMVC上下文中中的类型转换器
- 不配置:使用默认的
- 配置:默认的+配置的
-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 配置ConversionServiceFactoryBean -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<!-- 自己定义的类型转换 -->
<bean class="com.nhkj.util.StringToStudentConverter"></bean>
</set>
</property>
</bean>
解决字符串转换为Date类型的问题
方法一:数据格式化
注意:前端传输的时间字符串格式要和注解指定的格式一致,不然会报错。
@RequestMapping("/testStringToDate")
public String testStringToDate(@DateTimeFormat(pattern="yyyy-MM-dd") Date birthday) {
System.out.println(birthday);
return "success";
}
方法二:自定义类型转换器
- 编写自定义类型转换器
public class StringToDateConverter implements Converter<String, Date>{
@Override
public Date convert(String arg0) {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
if(arg0 == null) {
throw new NullPointerException("请输入要转换的日期");
}
try {
Date date = format.parse(arg0);
return date;
} catch (ParseException e) {
throw new RuntimeException("输入日期有误");
}
}
}
- springmvc.xml配置文件
<!-- 配置类型转换工厂 -->
<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!-- 给工厂注入一个新的类型转换器 -->
<property name="converters">
<array>
<!-- 配置之定义的类型转换器 -->
<bean class="com.nhkj.util.StringToDateConverter"></bean>
</array>
</property>
</bean>
<mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>
测试
/**
* 转换时间类型
* @param date
* @return
*/
@RequestMapping("/testDate")
public String testDate(Date date) { //前端传2020-10-10
System.out.println(date);
return "success";
}