SpringMVC学习(5):自定义数据转换器

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ! https://blog.csdn.net/jex00000/article/details/86673894

前言

在前面的章节我们学习过使用SpringMVC框架进行web开发,前端页面传输的数据会由HandlerAdapter组件自动封装到业务方法的参数中。

在http表单中的所有请求参数都是String类型的,如果业务参数是String或者int类型,HandlerAdapter会自动完成数据转换,但是如果参数是其他数据类型,比如Date类型,HandlerAdapter是不会将String类型转换为Date类型的,我们需要实现Converter接口来协助SpringMVC完成数据类型的转换。

实现

1、创建DateConverter转换器

import org.springframework.core.convert.converter.Converter;

public class DateConverter implements Converter<String,Date>{

    private String pattern;

    public DateConverter(String pattern){
        this.pattern = pattern;
    }

    public Date convert(String source) {
        // TODO Auto-generated method stub
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.parse(source);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

}

DateConverter转换器实现了org.springframework.core.convert.converter.Converter接口,将String类型的数值转换为Date类型。

2、配置springmvc.xml中的conversionService bean

 <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
      <property name="converters">
          <list>
              <!-- 日期转换器 -->
              <bean class="com.jex.utils.DateConverter">
                 <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
              </bean>
          </list>
     </property>
 </bean>

 <mvc:annotation-driven conversion-service="conversionService"/>

**注意:**bean的类名称必须是org.springframework.context.support.ConversionServiceFactoryBean。bean必须包含一个converters属性,它将列出在应用程序中用到的所有定制Converter。将我们自定义的DateConverter添加到converters中,通过有参构造函数创建DateConverter。同时annotation-driven元素的conversion-service属性赋bean名称。

3、创建业务方法

	@RequestMapping(value="/testDateConverter")
	@ResponseBody
	public String testDateConverter(Date date){
		return date.toString();
	}

4、创建addDate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
	<form action="testDateConverter" method="post">
		请输入日期:<input type="text" name="date"/>(yyyy-MM-dd)<br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

5、运行
image
image

除了Date类型的转换,我们还可以自定义其它的数据格式,比如注册一个user,通过转换器将前端页面输入的"id-name-age"形式的String类型的数据直接转换为user对象。

1、创建User实体类

public class User {
	private int id;
	private String name;
	private int age;
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	
}

2、创建UserConverter转换器

import org.springframework.core.convert.converter.Converter;

public class UserConverter implements Converter<String,User>{

	public User convert(String source) {
		// TODO Auto-generated method stub
		String[] args = source.split("-");
		User user = new User();
		user.setId(Integer.parseInt(args[0]));
		user.setName(args[1]);
		user.setAge(Integer.parseInt(args[2]));
		return user;
	}

}

3、配置springmvc.xml中的conversionService bean

 <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
      <property name="converters">
          <list>
              <!-- 日期转换器 -->
              <bean class="com.jex.utils.DateConverter">
                  <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
              </bean>
              <!--User转换器 -->
              <bean class="com.jex.utils.UserConverter"></bean>
          </list>
      </property>
 </bean>

 <mvc:annotation-driven conversion-service="conversionService"/>

4、创建业务方法

	@RequestMapping(value="/testUserConverter")
	@ResponseBody
	public String testUserConverter(User user){
		return user.toString();
	}

5、创建addUser.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
	<form action="testUserConverter" method="post">
		用户信息:<input type="text" name="student"/><font style="font-size:13px">(id-name-age)</font><br/>
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

6、运行
image

image

源码

链接:
https://pan.baidu.com/s/191wnUwW0a8AOeZnhOSWH5A
提取码:1v5q


猜你喜欢

转载自blog.csdn.net/jex00000/article/details/86673894
今日推荐