我们在使用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自定义类型转换器
综上所述,结合Spring MVC和Spring Security实现自定义登录,需要理解两者的基本原理,配置合适的过滤器、认证提供者和授权规则。通过这种方式,我们可以创建一个既安全又易于维护的Web应用程序,为用户提供安全的...
11. **转换器和格式化器(Converter & Formatter)**:处理请求参数和模型属性之间的类型转换,使数据绑定更加灵活。 12. **MessageSource**:处理国际化和本地化,提供多语言支持。 13. **异常处理**:通过@...
4. 注册并使用转换器:在返回JSON数据前,需要创建一个JsonConfig对象,并调用registerJsonValueProcessor方法,将我们的自定义转换器注册进去。这样,在将对象转换为JSON字符串时,就会调用我们实现的转换逻辑。 5...
拦截器(Interceptor)是Spring MVC中的一种机制,可以在请求处理前、后执行自定义逻辑。通过实现HandlerInterceptor接口或使用@Interceptor注解,开发者可以添加全局的行为,如日志记录、权限检查等。 此外,...
9. **拦截器(Interceptor)**: Spring MVC允许自定义拦截器,可以在请求处理前或后执行一些通用逻辑,如权限检查、日志记录等。 10. **异常处理**: 可以全局或局部地配置异常处理器,将异常转换为特定的视图或HTTP...
源码中,我们可以看到Spring如何解析请求参数并将其绑定到对象属性上,同时支持自定义转换器和验证器。 此外,Spring MVC的视图解析器是另一个重要部分,它负责找到合适的视图来渲染响应。例如,JSP、Thymeleaf或...
接下来,我们需要注册这个自定义转换器。Spring提供了两种方式来注册: 1. 配置类注册:在Spring Boot的配置类中,使用`WebMvcConfigurer`接口的`addFormatters`方法: ```java @Configuration public class ...
12. **异常处理**:Spring MVC允许自定义异常处理器,将业务逻辑中抛出的异常转换为用户友好的错误页面。 13. **注解驱动开发**:Spring MVC广泛使用注解,如@Controller、@RequestMapping、@RequestParam等,使得...
- **消息转换器**:用于处理不同类型的请求体和响应体。 - **使用 MVC Java 编程进行高级定制**:通过 Java 配置类来定制 Spring MVC 的行为。 - **使用 MVC 命名空间进行高级定制**:XML 配置文件中的命名空间可以...
14. **RESTful API**:Spring MVC通过`@RestController`和`@RequestMapping`可以轻松创建RESTful风格的API,便于前后端分离的开发。 15. **Spring MVC的配置**:包括XML配置和Java配置两种方式,现在更推荐使用Java...
要使用Spring MVC,首先需要在项目中引入Spring MVC的依赖,并配置Spring的DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 3. **Controller** Controller是处理请求的组件,通常...
3. 配置转换器:在Spring MVC配置中,你可以通过`<mvc:annotation-driven>`标签启用数据绑定和类型转换功能,并可以自定义转换器的优先级或添加新的转换器。 ```xml <mvc:annotation-driven> <mvc:converters> <!...
5. **使用参数绑定拦截器**:创建自定义拦截器,对请求参数进行预处理,过滤或修正不合法的输入。 此外,开发者还应关注Spring的安全更新,及时升级Spring MVC框架以修补已知的安全漏洞。通过结合代码审查、单元...
`MappingJackson2HttpMessageConverter`是Spring MVC中用于处理JSON数据的典型转换器。这个转换器依赖于Jackson库,能够将Java对象转换为JSON字符串,以及将JSON字符串解析为Java对象。在配置文件中,我们需要声明这...
8. **Conversion and Validation**: Spring MVC提供了一套完整的数据绑定、类型转换和验证机制。比如,@RequestParam、@PathVariable等注解用于从请求参数中获取数据,@Valid用于数据验证。 9. **Tiles, FreeMarker...
Spring MVC是Spring框架的一个核心模块,它主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这篇文档详细地介绍了Spring MVC的功能、工作原理以及如何将其有效地应用于实际项目中。Spring MVC的设计目标是...
- **消息编码解码器**:Netty需要消息编码解码器来将HTTP请求转换为Spring MVC可以处理的形式,以及将Spring MVC的响应转换回HTTP响应。 - **路由配置**:配置Netty服务器的路由,使其能够正确地将请求转发到对应...