《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内部自定义的转换器。
《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器的更多相关文章
- 《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置
上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了.这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置. 一.执行流程 来解释一下上图中的各个名词1.Di ...
- flask第十二篇——自定义url转换器【2】
继续昨天的话题,今天我们来写一个手机号的转换器,方便大家理解 我们在`BaseConverter`源码里看到好多这种正则表达式: 正则表达式的目的就是规范匹配的规则,现在我们写一个简单的匹配手机号的正 ...
- springmvc——自定义类型转换器
一.什么是springmvc类型转换器? 在我们的ssm框架中,前端传递过来的参数都是字符串,在controller层接收参数的时候springmvc能够帮我们将大部分字符串类型的参数自动转换为我们指 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- 《SpringMVC从入门到放肆》十三、SpringMVC数据校验
上一章,我们学习了SpringMVC的自定义类型转换器,但是如果转换后的数据传递到Controller的方法中,忽然发现有某些属性为Null了,这怎么办?我们需要一种有效的数据校验机制,来对数据进行有 ...
- [OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
http://blog.csdn.net/poem_qianmo/article/details/25560901 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- springmvc:自定义类型转换器代码编写
字符串转换日期: 1.自定义一个类 /** * 字符串转换日期 */ public class StringToDateConverter implements Converter<String ...
- VSTO 学习笔记(十二)自定义公式与Ribbon
原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...
随机推荐
- MongoDB代码——Python篇
需要安装的库:pymongo 一.添加文档 from pymongo import MongoClient # 连接服务器 conn = MongoClient("localhost&quo ...
- app接口中Http请求头示例
POST /v5/simProduct/getProductDetails HTTP/1.1 Accept:image/jsonHost: netroam.mihome.xiaomi.netUser- ...
- 基于spark-streaming实时推荐系统
基于spark-streaming实时推荐系统(一) 基于spark-streaming实时推荐系统( 二) 基于spark-streaming实时推荐系统(三)
- Web前端-网站首页和注册界面的实现
首页用到的知识如下: 1.bootstrap框架 2.jQuerry实现页面定时弹出广告 注册界面用到的知识: 1.bootstrap框架 2.jQuerry实现省市联动操作 3.jQuerry实现表 ...
- HTML5画布小dome八卦图
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...
- 使用HDFS完成wordcount词频统计
任务需求 统计HDFS上文件的wordcount,并将统计结果输出到HDFS 功能拆解 读取HDFS文件 业务处理(词频统计) 缓存处理结果 将结果输出到HDFS 数据准备 事先往HDFS上传需要进行 ...
- TLS详解
TLS加密通信, 开始使用协商的秘钥进行加密通信 1.服务器也可以要求验证客户端,即实现双向的验证, 2.会话缓存握手过程,为了建立握手的速度,减少协议带来的性能方面的降低和资源方面的消耗,TLS协议 ...
- 关于父窗口获取跨域iframe子窗口中的元素
这几天在项目中遇到,一个难点, 就是需要异步加载一个pdf插件, 同时又需要获取这个插件中的点击事件来生成用户的下载记录. 刚开始也是想了很多方法,网上搜的 格式1:$("#iframe的I ...
- 认识 Linux 文件权限
Linux 之所以是比较安全的操作系统,和它丰富的文件权限设定是有关系的,学习 Linux 操作系统一定要懂文件的权限识别和设置.通过这篇博文我们了解 Linux 操作系统的文件权限. 拥有者 / ...
- .net core ef 通过dbfirst方式连接sql server数据库
1. 创建基于.net core 的项目(过程略) 2. 使用nuget添加引用 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore ...