之前的教程,我们都已经学会了如何使用Spring MVC来进行开发,掌握了基本的开发方法,返回不同类型的结果也有了一定的了解,包括返回ModelAndView、返回List、Map等等,这里就包含了传统的开发方式,和写接口的开发方式。
传参我们也学了简单参数和复杂参数的传递和接收,但是在参数传递过程中,常常需要把表单中的参数映射到我们对象的属性中,比如前台传的是2018-01-01字符串,可是我们的实体类中定义的是Date类型的变量,这时就需要用到SpringMVC的自定义类型转换器了。
一、配置方式
如果要使用类型转换器,我们就需要在spring-servlet.xml中配置,当然配置有两种方式,我们逐一讲解,如下:
1<!--使用注解扫描机制-->
2<mvc:annotation-driven />
3<!--使用传统配置方法-->
4<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
其实
二、具体开发
如果,想把一个字符串转换成日期时间类型,Spring是没有提供具体实现方法的,需要我们自己定义自己的类型转换器来实现。如下:
1/**
2 * @ClassName: DateConvert
3 * @Description: 全局日期处理类
4 * @author WangJunnan
5 * @date 2018年11月20日 下午2:25:47
6 */
7public class DateConvert implements Converter<String, Date> {
8
9 @Override
10 public Date convert(String stringDate) {
11 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
12 try {
13 return simpleDateFormat.parse(stringDate);
14 } catch (ParseException e) {
15 e.printStackTrace();
16 }
17 return null;
18 }
19}
注意:如果不想通过Spring的配置Bean方法来实例化Bean,则需要在该类型转换器的类上加@Component注解,目的是为了让Spring自动扫描该转换器到容器中。
如果不想使用注解方法,则还需要在spring-servlet.xml中配置,配置方法如下:
1<bean id="dateConvert" class="com.chinecredit.eccis.common.DateConvert"/>
2<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
3 <property name="converters">
4 <set>
5 <ref bean="dateConvert"/>
6 </set>
7 </property>
8</bean>
9<mvc:annotation-driven conversion-service="conversionService"/>
三、测试
Controller类:
1@Controller
2@RequestMapping("/test")
3public class TestController {
4
5 @RequestMapping("/add")
6 @ResponseBody
7 public String add(@RequestBody Student student){
8 System.out.println(student);
9 return "{'success':true}";
10 }
11}
注意:这里用的是@RequestBody,前台传递参数时,如果使用Ajax的话,则需要使用如下方法传递参数。
1$.ajax({
2 type: "POST",
3 url: "${pageContext.request.contextPath}/test/add",
4 data: JSON.stringify({"name":'张三',"age":20,"brithday":'2018-01-01'}),
5 contentType:"application/json",
6 dataType:"JSON",
7 success: function(data){
8 console.log(data);
9 }
10});
Student类:
1public class Student implements Serializable{
2 private String name;
3 private String age;
4 private Date birthday;
5
6 //此处省略getter、setter
7 @Override
8 public String toString() {
9 return "Student [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
10 }
11}
到此,我们的自定义类型就完成了,大家可以测试一下。
四、总结
在上面我们使用的是org.springframework.format.support.FormattingConversionServiceFactoryBean类,在这里其实还有另外一个类可以使用ConversionServiceFactoryBean。但是使用FormattingConversionServiceFactoryBean可以让SpringMVC支持@NumberFormat和@DateTimeFormat等Spring内部自定义的转换器。