Spring MVC 之类型转换(五)

简介: 虽然SpringMVC可以自动绑定多种数据类型,但是有时候有些特殊的数据类型还是会在绑定时发生错误,需要我们自己书写类型转换完成绑定。 SpringMVC中提供两种绑定方式:以时间转换为例。 1、属性编辑器(传统方式) 控制器: 1 @RequestMapping(value="/login.

虽然SpringMVC可以自动绑定多种数据类型,但是有时候有些特殊的数据类型还是会在绑定时发生错误,需要我们自己书写类型转换完成绑定。

SpringMVC中提供两种绑定方式: 以时间转换为例

1、属性编辑器(传统方式)

控制器:

 1 @RequestMapping(value="/login.do")
 2     public String login(UserBean user){
 3         log.info(user.getUsername());
 4         log.info(user.getBirthday());
 5         return "index";
 6     }
 7  // 自定义一个属性编辑器,用于转换时间类型
 8 @InitBinder
 9     public void converterStringDate(WebDataBinder  binder){
10         binder.registerCustomEditor(Date.class, new DateEditor());
11     } 

可以通过重写PropertyEditorSupport中的setAsText()定义自己的转换规则

 1 package com.cy.springannotation.controller;
 2 
 3 import java.beans.PropertyEditorSupport;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7 
 8 public class DateEditor extends PropertyEditorSupport {
 9     
10     @Override
11     public void setAsText(String text) throws IllegalArgumentException {
12                 Date date = null;
13                 try {
14                     if(text.contains("-")){
15                         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
16                         date = sf.parse(text);
17                     }else {
18                         SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
19                         date = sf.parse(text);
20                     }
21                 } catch (ParseException e) {
22                     e.printStackTrace();
23                 }
24                 this.setValue(date);
25     }
26 
27 }

2、类型转换器

Converter是Spring3提供的新的类型转换,相对于属性转换器更强大,可以把任意类型转换,而不是局限于String类型。
 
控制器:
1 @RequestMapping(value="/login.do")
2     public String login(UserBean user){
3         log.info(user.getUsername());
4         log.info(user.getBirthday());
5         return "index";
6     }
7      

 

全局类型转换器
 1 package com.cy.springannotation.controller;
 2 
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6 
 7 import org.springframework.core.convert.converter.Converter;
 8 /**
 9  * 全局类型转换器
10  * @author acer
11  *
12  */
13 public class DateConvert  implements Converter<String, Date>{
14     @Override
15     public Date convert(String text) {
16         Date date = null;
17         try {
18             if(text.contains("-")){
19                 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
20                 date = sf.parse(text);
21             }else {
22                 SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
23                 date = sf.parse(text);
24             }
25             
26         } catch (ParseException e) {
27             e.printStackTrace();
28         }
29         return date;
30     }
31 
32 }

类型转换器需要在配置文件中配置:

 1 <!--开启注解  -->    
 2 <mvc:annotation-driven conversion-service="tc" />
 3 
 4 <!--类型转换器工厂  -->
 5 
 6 <bean id="tc" class="org.springframework.context.support.ConversionServiceFactoryBean">
 7     <property name="converters">
 8         <list>
 9             <bean class="com.cy.springannotation.controller.DateConvert" />
10         </list>
11     </property>
12 </bean>

 

 

共同的jsp页面:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     <title>登录页面</title>
12    <script type="text/javascript" src="<%=basePath%>js/jquery-2.1.4.js"></script>
13    <script type="text/javascript">
14      
15    
16    </script>
17   </head>
18   <body>
19   <form action="login.do" method="post">
20     <table>
21        <tr>
22            <td>用户名:</td>
23            <td><input type="text" name="username"/></td>
24        </tr>
25        <tr>
26            <td>出生日期</td>
27            <td><input type="text" name="birthday"/></td>
28        </tr>
29        <tr>
30            <td colspan="2"> <input type="submit" value="提交"/> </td>
31        </tr>
32     </table>
33   </form>
34   </body>
35 </html>

 

结果显示:

 

相关文章
|
18天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
5天前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
2月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
2月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
94 4
|
2月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
88 3
|
2月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
89 2
|
3月前
|
前端开发 Java 应用服务中间件
我以为我对Spring MVC很了解,直到我遇到了...
所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。
111 1
我以为我对Spring MVC很了解,直到我遇到了...
|
3月前
|
前端开发 Java API
Spring Boot 中的 MVC 支持
### Spring Boot 注解摘要 - **@RestController** - **@RequestMapping** - **@PathVariable** - **@RequestParam** - **@RequestBody**
28 2