`
manzhizhen
  • 浏览: 293729 次
  • 性别: 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 />。

分享到:
评论

相关推荐

    第12章spring-mvc自定义类型转换器

    第12章spring-mvc自定义类型转换器

    spring mvc 和spring security自定义登录

    综上所述,结合Spring MVC和Spring Security实现自定义登录,需要理解两者的基本原理,配置合适的过滤器、认证提供者和授权规则。通过这种方式,我们可以创建一个既安全又易于维护的Web应用程序,为用户提供安全的...

    spring mvc 整合包

    11. **转换器和格式化器(Converter & Formatter)**:处理请求参数和模型属性之间的类型转换,使数据绑定更加灵活。 12. **MessageSource**:处理国际化和本地化,提供多语言支持。 13. **异常处理**:通过@...

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

    4. 注册并使用转换器:在返回JSON数据前,需要创建一个JsonConfig对象,并调用registerJsonValueProcessor方法,将我们的自定义转换器注册进去。这样,在将对象转换为JSON字符串时,就会调用我们实现的转换逻辑。 5...

    Mastering Spring MVC 4(2015.09)源码

    拦截器(Interceptor)是Spring MVC中的一种机制,可以在请求处理前、后执行自定义逻辑。通过实现HandlerInterceptor接口或使用@Interceptor注解,开发者可以添加全局的行为,如日志记录、权限检查等。 此外,...

    Spring mvc5.0.3 所有jar包

    9. **拦截器(Interceptor)**: Spring MVC允许自定义拦截器,可以在请求处理前或后执行一些通用逻辑,如权限检查、日志记录等。 10. **异常处理**: 可以全局或局部地配置异常处理器,将异常转换为特定的视图或HTTP...

    《精通Spring MVC 4》源码

    源码中,我们可以看到Spring如何解析请求参数并将其绑定到对象属性上,同时支持自定义转换器和验证器。 此外,Spring MVC的视图解析器是另一个重要部分,它负责找到合适的视图来渲染响应。例如,JSP、Thymeleaf或...

    自定义全局类型转换器

    接下来,我们需要注册这个自定义转换器。Spring提供了两种方式来注册: 1. 配置类注册:在Spring Boot的配置类中,使用`WebMvcConfigurer`接口的`addFormatters`方法: ```java @Configuration public class ...

    Spring MVC框架的各种依赖包下载

    12. **异常处理**:Spring MVC允许自定义异常处理器,将业务逻辑中抛出的异常转换为用户友好的错误页面。 13. **注解驱动开发**:Spring MVC广泛使用注解,如@Controller、@RequestMapping、@RequestParam等,使得...

    Spring mvc 教程

    - **消息转换器**:用于处理不同类型的请求体和响应体。 - **使用 MVC Java 编程进行高级定制**:通过 Java 配置类来定制 Spring MVC 的行为。 - **使用 MVC 命名空间进行高级定制**:XML 配置文件中的命名空间可以...

    Spring MVC 基础实例源码01

    14. **RESTful API**:Spring MVC通过`@RestController`和`@RequestMapping`可以轻松创建RESTful风格的API,便于前后端分离的开发。 15. **Spring MVC的配置**:包括XML配置和Java配置两种方式,现在更推荐使用Java...

    spring MVC_快速入门

    要使用Spring MVC,首先需要在项目中引入Spring MVC的依赖,并配置Spring的DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 3. **Controller** Controller是处理请求的组件,通常...

    spring mvc3.1.0 日期自动转换

    3. 配置转换器:在Spring MVC配置中,你可以通过`&lt;mvc:annotation-driven&gt;`标签启用数据绑定和类型转换功能,并可以自定义转换器的优先级或添加新的转换器。 ```xml &lt;mvc:annotation-driven&gt; &lt;mvc:converters&gt; &lt;!...

    spring mvc 参数绑定漏洞

    5. **使用参数绑定拦截器**:创建自定义拦截器,对请求参数进行预处理,过滤或修正不合法的输入。 此外,开发者还应关注Spring的安全更新,及时升级Spring MVC框架以修补已知的安全漏洞。通过结合代码审查、单元...

    Spring MVC 数据转换和格式化.docx

    `MappingJackson2HttpMessageConverter`是Spring MVC中用于处理JSON数据的典型转换器。这个转换器依赖于Jackson库,能够将Java对象转换为JSON字符串,以及将JSON字符串解析为Java对象。在配置文件中,我们需要声明这...

    spring mvc框架源码

    8. **Conversion and Validation**: Spring MVC提供了一套完整的数据绑定、类型转换和验证机制。比如,@RequestParam、@PathVariable等注解用于从请求参数中获取数据,@Valid用于数据验证。 9. **Tiles, FreeMarker...

    spring MVC文档

    Spring MVC是Spring框架的一个核心模块,它主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这篇文档详细地介绍了Spring MVC的功能、工作原理以及如何将其有效地应用于实际项目中。Spring MVC的设计目标是...

    spring mvc中启动netty

    - **消息编码解码器**:Netty需要消息编码解码器来将HTTP请求转换为Spring MVC可以处理的形式,以及将Spring MVC的响应转换回HTTP响应。 - **路由配置**:配置Netty服务器的路由,使其能够正确地将请求转发到对应...

Global site tag (gtag.js) - Google Analytics