`
manzhizhen
  • 浏览: 288991 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring MVC 创建自定义转换器

阅读更多

         我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对象的属性中,我们可以在默认的spring-servlet.xml加上如下的配置即可做到普通数据类型的转换,如将String转换成Integer和Double等:

          <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。

 

         但如果你想将字符串映射成对象中的时间对象Date,Spring默认没有提供这种功能,需要你自己实现,即自定义转换器:

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;

/**
 * 字符串到日期的转换器
 * @author manzhizhen
 *
 * 2015年6月4日
 */
public class StringToDateConverter implements Converter<String, Date>{
   
    public StringToDateConverter() {
        System.out.println("转换器我出生啦");
    }

    @Override
    public Date convert(String source) {
        if(StringUtils.isBlank(source)) {
            return null;
        }
       
        Date date = null;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            date = format.parse(source.trim());
        } catch (Exception e) {
            try {
                format = new SimpleDateFormat("yyyyMMddHHmmss");
                date = format.parse(source.trim());
            } catch (Exception e1) {
                try {
                    format = new SimpleDateFormat("yyyy-MM-dd");
                    date = format.parse(source.trim());
                } catch (Exception e2) {
                }
            }
        }
       
        return date;
    }
}

 测试用的数据对象如下:

package com.manzhizhen.beans;

import java.io.Serializable;
import java.util.Date;

/**
 * 传参对象
 * @author 易振强
 *
 * 2015年6月10日
 */
public class ParamObj implements Serializable {
	private static final long serialVersionUID = -7850639976682528281L;

	private Date date;
	private Double ratio;

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public Double getRatio() {
		return ratio;
	}

	public void setRatio(Double ratio) {
		this.ratio = ratio;
	}
}

 控制器的测试代码如下:

package com.manzhizhen.controllers;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.manzhizhen.beans.ParamObj;

/**
 * 测试控制器
 * @author manzhizhen
 *
 * 2015年6月10日
 */
@Controller
@RequestMapping("/test")
public class TestController {

	@RequestMapping(value="/inputstr.htm", method=RequestMethod.POST)
	public ModelAndView deal(HttpServletRequest request, ParamObj paramObj) {
		ModelAndView mv = new ModelAndView();
		
		System.out.println(paramObj);
		
		mv.setViewName("/test/test.jsp");
		return mv;
	}
	
	@ExceptionHandler(Exception.class)
	public void ExceptionHandler(Exception e) {
		System.out.println(e);
	}
}

 测试页面index.jsp:

<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" language="java" %>
<html>
<head></head>
<body style="width:80%;margin:10 auto">     
    <form action="test/inputstr.htm" method="post" >
        <input type="text" value="2015-01-02" id="date" name="date"/>
        <input type="text" value="3.04" id="ratio" name="ratio"/>
        <input type="submit" value="submit" />
    </form>
</body>
</html>

 

准备好以上内容后,我们开始对SpringMVC的默认配置文件spring-servlet.xml进行配置了,加上如下内容:

    <bean id="myConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
         <property name="converters"> 
             <list> 
               <bean class="com.manzhizhen.converters.StringToDateConverter"/> 
            </list> 
        </property>
    </bean>
<mvc:annotation-driven conversion-service="myConversionService" />

 

注意,只能配置一个mvc:annotation-driven,谁先配置谁先生效,所以请去掉其他的  <mvc:annotation-driven />。

分享到:
评论

相关推荐

    Spring MVC自定义日期类型转换器实例详解

    主要介绍了Spring MVC自定义日期类型转换器实例详解的相关资料,需要的朋友可以参考下

    Spring MVC 3.0实战指南.ppt

    基于ConversionService体系,定义自定义的类型转换器 格式化:带格式字符串内部对象 相互转换 使用支持格式化的转换器 数据校验框架 JSR 303 数据校验框架 如何使用注解驱动的校验 使用校验功能时,处理方法要...

    Spring Web MVC入门教程

    包括:简介、内建类型转换器、自定义类型转换器等 第五章:数据格式化 包括:简介、内建格式转换器、字段级别的解析/格式化等 第六章:数据验证 包括:声明式数据验证、内置的验证约束和注解、错误消息的处理等

    基于Spring MVC的web框架 1.1.11

    工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...

    Spring3MVC注解教程.ppt

    基于ConversionService体系,定义自定义的类型转换器 格式化:带格式字符串内部对象 相互转换 使用支持格式化的转换器 数据校验框架 JSR 303 数据校验框架 如何使用注解驱动的校验 使用校验功能时,处理...

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    使用了SpringContextHolder方便在自定义线程中调用spring已经实例的bean,如使用service 使用了urlrewrite filter进行地址重写,实现伪静态页面 使用了sitemesh对网页进行布局和修饰 使用了loginFilter对访问进行...

    spring-mvc-JsonIgnoreDynamically:渲染前按名称从 jackson json 序列化中排除某些字段

    如何使用/如何工作: 我们需要定义我们的自定义 Http 消息转换器,该转换器将负责决定响应的特定部分是否需要序列化(Json 响应)。 对于需要某种过滤的所有自定义 java 对象,我们需要在类级别定义注释,给出不应为...

    Spring.3.x企业应用开发实战(完整版).part2

    8.2.3 其他持久技术的异常转换器 8.3 统一数据访问模板 8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6 .3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 ...

    Spring 2.0 开发参考手册

    19.3.1. 使用消息转换器 19.3.2. SessionCallback 和ProducerCallback 19.4. 接收消息 19.4.1. 同步接收 19.4.2. 异步接收 - 消息驱动的POJOs 19.4.3. SessionAwareMessageListener 接口 19.4.4. ...

    Spring攻略(第二版 中文高清版).part1

    13.3 Spring MVC控制器的单元测试 518 13.3.1 问题 518 13.3.2 解决方案 518 13.3.3 工作原理 518 13.4 管理集成测试中的应用上下文 520 13.4.1 问题 520 13.4.2 解决方案 520 13.4.3 工作原理 521 ...

    基于SpringMVC的一个web框架

    工具类数据校验 jsp自定义标签 Spring自定义注解 默认requestMapping 1.1.2 代码生成器 1.1.3 首页修改 dateformat.js 时间参数转换 SpringMVC配置文件集中 快递参数接口 1.1.4 des加解密字符串和文件 1.1.5 redis...

    Spring中文帮助文档

    2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态...

    Spring API

    2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态...

    Spring Boot中文文档.rar

    将错误页面映射到Spring MVC之外 28.1.12.Spring HATEOAS 28.1.13.CORS支持 28.2.“Spring WebFlux框架” 28.2.1.Spring WebFlux自动配置 28.2.2.带有HttpMessageReaders和HttpMessageWriters的...

    spring chm文档

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7...

    Spring攻略(第二版 中文高清版).part2

    13.3 Spring MVC控制器的单元测试 518 13.3.1 问题 518 13.3.2 解决方案 518 13.3.3 工作原理 518 13.4 管理集成测试中的应用上下文 520 13.4.1 问题 520 13.4.2 解决方案 520 13.4.3 工作原理 521 ...

    Spring3.x企业应用开发实战(完整版) part1

    8.2.3 其他持久技术的异常转换器 8.3 统一数据访问模板 8.3.1 使用模板和回调机制 8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 ...

    Spring in Action(第二版 中文高清版).part2

    B.2 单元测试Spring MVC控制器 B.2.1 模拟对象 B.2.2 断言ModelAndView的内容 B.3 使用Spring进行综合测试 B.3.1 测试装配后的对象 B.3.2 综合测试事务处理对象 B.3.3 测试数据库 B.3.4 使用Gienah Testing在...

Global site tag (gtag.js) - Google Analytics