《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器
之前的教程,我们都已经学会了如何使用Spring MVC来进行开发,掌握了基本的开发方法,返回不同类型的结果也有了一定的了解,包括返回ModelAndView、返回List、Map等等,这里就包含了传统的开发方式,和写接口的开发方式。
传参我们也学了简单参数和复杂参数的传递和接收,但是在参数传递过程中,常常需要把表单中的参数映射到我们对象的属性中,比如前台传的是2018-01-01字符串,可是我们的实体类中定义的是Date类型的变量,这时就需要用到SpringMVC的自定义类型转换器了。
一、配置方式
如果要使用类型转换器,我们就需要在spring-servlet.xml中配置,当然配置有两种方式,我们逐一讲解,如下:
<!--使用注解扫描机制-->
<mvc:annotation-driven />
<!--使用传统配置方法-->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
其实 <mvc:annotation-driven /> 标签会默认创建并注册一个 RequestMappingHandlerMapping(在Spring3.2之前是DefaultAnnotationHandlerMapping) 和 RequestMappingHandlerAdapter (Spring3.2之前是AnnotationMethodHandlerAdapter),当然,如果上下文有对应的显示实现类,将该注解注册的覆盖掉。该注解还会创建一个ConversionService,即 FormattingConversionServiceFactoryBean。
二、具体开发
如果,想把一个字符串转换成日期时间类型,Spring是没有提供具体实现方法的,需要我们自己定义自己的类型转换器来实现。如下:
/**
* @ClassName: DateConvert
* @Description: 全局日期处理类
* @author WangJunnan
* @date 2018年11月20日 下午2:25:47
*/
public class DateConvert implements Converter<String, Date> {
@Override
public Date convert(String stringDate) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return simpleDateFormat.parse(stringDate);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
注意:如果不想通过Spring的配置Bean方法来实例化Bean,则需要在该类型转换器的类上加@Component注解,目的是为了让Spring自动扫描该转换器到容器中。
如果不想使用注解方法,则还需要在spring-servlet.xml中配置,配置方法如下:
<bean id="dateConvert" class="com.chinecredit.eccis.common.DateConvert"/>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="dateConvert"/>
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
三、测试
Controller类:
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/add")
@ResponseBody
public String add(@RequestBody Student student){
System.out.println(student);
return "{'success':true}";
}
}
注意:这里用的是@RequestBody,前台传递参数时,如果使用Ajax的话,则需要使用如下方法传递参数。
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/test/add",
data: JSON.stringify({"name":'张三',"age":20,"brithday":'2018-01-01'}),
contentType:"application/json",
dataType:"JSON",
success: function(data){
console.log(data);
}
});
Student类:
public class Student implements Serializable{
private String name;
private String age;
private Date birthday;
//此处省略getter、setter
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
}
}
到此,我们的自定义类型就完成了,大家可以测试一下。
四、总结
在上面我们使用的是org.springframework.format.support.FormattingConversionServiceFactoryBean类,在这里其实还有另外一个类可以使用ConversionServiceFactoryBean。但是使用FormattingConversionServiceFactoryBean可以让SpringMVC支持@NumberFormat和@DateTimeFormat等Spring内部自定义的转换器。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CycleGan人脸转为漫画脸,牛掰的知识又增加了!| 附代码
- 浙大版《C语言程序设计(第3版)》题目集 练习7-4 找出不是两个数组共有的元素
- 浙大版《C语言程序设计(第3版)》题目集 练习7-7 矩阵运算
- 系统之眼!Linux系统性能监控工具Glances
- 浙大版《C语言程序设计(第3版)》题目集 练习7-8 方阵循环右移
- 浙大版《C语言程序设计(第3版)》题目集 练习7-9 计算天数
- 浙大版《C语言程序设计(第3版)》题目集 练习7-10 查找指定字符
- 浙大版《C语言程序设计(第3版)》题目集 练习7-11 字符串逆序
- 浙大版《C语言程序设计(第3版)》题目集 习题7-1 选择法排序
- 浙大版《C语言程序设计(第3版)》题目集 习题7-2 求一批整数中出现最多的个位数字
- 浙大版《C语言程序设计(第3版)》题目集 习题7-3 判断上三角矩阵
- 浙大版《C语言程序设计(第3版)》题目集 习题7-4 求矩阵各行元素之和
- 浙大版《C语言程序设计(第3版)》题目集 习题7-6 统计大写辅音字母
- 浙大版《C语言程序设计(第3版)》题目集 习题7-7 字符串替换
- 浙大版《C语言程序设计(第3版)》题目集 习题8-10 输出学生成绩