SpringMVC-数据类型转换
自定义类型转换器
Converter类型转换器用于对象之间的类型转换
Formatter与Converter的区别:
作用相同,只是Formatter(格式化程序)的源类型必须是一个String类型,而Converter(转换器)可以是任意类型
String time = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(time);
Date date = new Date();
将日期类型转换成字符串类型 String str = sdf.format(date);
将字符串类型转换成日期类型 Date date1 = sdf.parse(str);
1、Formatter
配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="com.k2.自定义类型转换器.convert.DateFormatter"></bean>
</set>
</property>
</bean>
<!-- 自定义类型转换器装配-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
实现DateFormatter接口
Formatter
public class DateFormatter implements Formatter<Date> {
// 定义日期格式
private String datePattern = "yyyy-MM-dd";
// 声明simpleDateFormat
private SimpleDateFormat simpleDateFormat;
public Date parse(String s, Locale locale) throws ParseException {
simpleDateFormat = new SimpleDateFormat(datePattern);
return simpleDateFormat.parse(s);
}
public String print(Date date, Locale locale) {
return new SimpleDateFormat().format(date);
}
}
2、Converter
配置
<!-- 自定义类型转换器:xml方式 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<array>
<bean class="com.k2.自定义类型转换器.convert.DateConverter"></bean>
<bean class="com.k2.自定义类型转换器.convert.MyConvert"></bean>
</array>
</property>
</bean>
实现Converter接口
Converter<String, Date>
public class DateConverter implements Converter<String, Date> {
// 定义日期格式
private String datePattern = "yyyy-MM-dd";
public Date convert(String source) {
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
Date date = null;
try {
date = sdf.parse(source);
} catch (ParseException e) {
System.out.println("请按正确方式输入日期:yyyy-MM-dd");
}
return date;
}
}
public class MyConvert implements Converter<String, Depart> {
// 传入一个字符串的值,类型转换为depart类型
public Depart convert(String s) {
Depart depart = new Depart();
String[] str = s.split(",");
String id = str[0];
String name = str[1];
depart.setId(id);
depart.setName(name);
return depart;
}
}
3、原生
@Controller
public class DateConverterTest {
/**
* 使用xml方式:需要配置DateConverter,在spring-mvc中配置 自定义类型转换器
*/
@GetMapping("/getDate/{birthday}")
public String getDate(@PathVariable() Date birthday) {
System.out.println("日期转换成功:" + birthday);
return "pages/success";
}
/**
* 使用注解方式
* 不用配置DateConverter,在spring-mvc中配置 注解方式<mvc:annotation-driven/>
*/
@RequestMapping("/getDateAnn")
public String getDateAnn(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday) {
System.out.println("日期转换成功:" + birthday);
return "pages/success";
}
@RequestMapping("/customDate1")
public String customDate(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date, Model model) {
String time = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(time);
Date date2 = new Date();
// 将日期转换成字符串类型 sdf.format(date2);
String sign_mark_id = sdf.format(date2);
System.out.println("将日期转换成字符串类型:"+sign_mark_id);
Date date1 = null;
try {
// 将字符串类型转换成日期类型 sdf.parse(sign_mark_id);
date1 = sdf.parse(sign_mark_id);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("将字符串类型转换成日期类型:"+date1);
System.out.println();
model.addAttribute("date", date2);
System.out.println(model.getAttribute("date"));
System.out.println("date=" + date);
return "pages/success";
}
}