springmvc的类型转换
一、springmvc的类型转换
(一)默认情况下,springmvc内置的类型转换器只能
将“yyyy/MM/dd”类型的字符串转换为Date类型的日期
情境一:
而现在我们无法得知用
户会输入什么日期格式的数据,所以,内置的类型转换器无法转换其他日期格式的类型
为了方便程序,减少代码量,我们抽离出自己的类型转换器
此种方法也有弊端,就是讲几个类唯一的继承权用在了类型转换器上,但也是没有办法的办法
步骤一:
定义自己的类型转换器 继承一个父接口 Converter<S, T>
s:代表源数据类型
T:代表目标数据类型
package cn.yxj.convertion; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern; import org.springframework.core.convert.converter.Converter; public class MyConvertion implements Converter<String, Date>{ public Date convert(String source) { /*SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");*/
SimpleDateFormat sdf=getDateFormat(source);
try {
return sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
} private SimpleDateFormat getDateFormat(String source) {
//进行正则匹配
//2016-12-14
//2016/12/14
//
if(Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", source)){
return new SimpleDateFormat("yyyy-MM-dd");
}else if(Pattern.matches("^\\d{4}/\\d{2}/\\d{2}$", source)){
return new SimpleDateFormat("yyyy/MM/dd");
}else if(Pattern.matches("^\\d{4}\\d{2}\\d{2}$", source)){
return new SimpleDateFormat("yyyyMMdd");
}else if(Pattern.matches("^\\d{4}年\\d{2}月\\d{2}日$", source)){
return new SimpleDateFormat("yyyy年MM月dd日");
}
return null;
} }
步骤二、在配置文件中注册自定义类型转化器,将该类交由spring容器管理
<!-- 01.注册自定义的类型转换器 -->
<bean id="myConvertion" class="cn.yxj.convertion.MyConvertion"></bean> <!--02.注册类型转换器的服务工厂 产生转换对象 -->
<bean id="convertionservice" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters" ref="myConvertion"></property>
</bean>
<!--03. -->
<mvc:annotation-driven conversion-service="convertionservice"/>
配置完成
(二) 情景二:
当我们在前台输入如下信息 ,年龄为string不能装配成后台的int类型转向400错误页面,
面对这种情况我们更想看到的是回到初始页面

解决方案:这种情况就是出现了类型转换异常
我们就采用异常处理机制,其实再出现类型转换异常时,请求就不会再进入处理器方法,而是被我们自定的的异常处理方法所捕获
在处理器类中加入异常处理方法,完成重定向的功能
//当出现类型转换异常时,跳回index.jsp
@ExceptionHandler(TypeMismatchException.class)
public ModelAndView getBack(HttpServletRequest request,Exception ex){
ModelAndView mv=new ModelAndView();
mv.setViewName("/index.jsp");
return mv;
}
(三)情景三:
完成上述操作后,我们现在再来思考一个问题,如果表单上有很多条数据,用户提交失败,重定向后之前所填的数据完全丢失,那用户的内心估计是崩溃的
这是我们就应该来考虑“数据回显”的问题了,最好,我们可以提示出那条数据出错了
下面我们就重新优化异常处理机制
首先我们查看一下异常的消息,我们会发现一个规律,利于我们进行特定数据异常的定位 所以下面我们使用ex.getMessage().contains(birthday)

//当出现类型转换异常时,跳回index.jsp
@ExceptionHandler(TypeMismatchException.class)
public ModelAndView getBack(HttpServletRequest request,Exception ex){
ModelAndView mv=new ModelAndView();
String birthday=request.getParameter("birthday");
String age=request.getParameter("age");
mv.addObject("birthday",birthday);
mv.addObject("age",age);
if(ex.getMessage().contains(birthday)){
mv.addObject("birthdayerror","日期格式不正确");
}
if(ex.getMessage().contains(age)){
mv.addObject("ageerror","年龄格式不正确");
}
mv.setViewName("/index.jsp");
return mv;
}
结束
springmvc的类型转换的更多相关文章
- spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二)
spring参数类型异常输出(二), SpringMvc参数类型转换错误输出(二) >>>>>>>>>>>>>>&g ...
- spring参数类型异常输出,SpringMvc参数类型转换错误输出
spring参数类型异常输出, SpringMvc参数类型转换错误输出 >>>>>>>>>>>>>>>> ...
- 转:SpringMVC之类型转换Converter(GenericConverter)
转: http://blog.csdn.net/fsp88927/article/details/37692215 SpringMVC 之类型转换 Converter 1.1 目录 1.1 目录 1. ...
- SpringMVC 之类型转换Converter详解转载
SpringMVC之类型转换Converter详解 本文转载 http://www.tuicool.com/articles/uUjaum 1.1 目录 1.1 目录 1.2 ...
- SpringMVC 之类型转换Converter 源代码分析
SpringMVC 之类型转换Converter 源代码分析 最近研究SpringMVC的类型转换器,在以往我们需要 SpringMVC 为我们自动进行类型转换的时候都是用的PropertyEdito ...
- SpringMVC之类型转换Converter
(转载:http://blog.csdn.net/renhui999/article/details/9837897) 1.1 目录 1.1 目录 1.2 前言 1.3 ...
- [转]SpringMVC日期类型转换问题三大处理方法归纳
http://blog.csdn.net/chenleixing/article/details/45190371 前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日 ...
- springmvc参数类型转换三种方式
SpringMVC绑定参数之类型转换有三种方式: 1. 实体类中加日期格式化注解 @DateTimeFormat(pattern="yyyy-MM-dd hh:MM&quo ...
- SpringMVC日期类型转换问题三大处理方法归纳
方法一:实体类中加日期格式化注解 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date receiveAppTime; 方法二: ...
随机推荐
- 大叔也学Xamarin系列
回到占占推荐博客索引 我就是我,请叫我仓储大叔 大叔听很多客户说,xamarin的资料网上太少了,是的,大叔也相信,因为大叔在学xamarin里确实很费劲,只能看看androd for java了,呵 ...
- Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx
Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx 1. 摘要算法的大概流程2 2. 旧约圣经 (39卷)2 2.1. 与古兰经的对 ...
- Nginx与Apache比较
Nginx特点:高性能epoll 异步非阻塞多个连接(万级别)可以对应一个进程 支持反向代理支持7层负载均衡静态文件.反向代理.前端缓存等处理方便支持高并发连接,每秒最多的并发连接请求理论可以达到 5 ...
- 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)
EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...
- 【源码】谷歌代理~WPF简单小软件-2015-10-15首发 (2016-03-01已更新源)
蛋疼,昨天把代理去了后才发现,原来咱们连谷歌应用都访问不了,,,用别人的总觉得不怎么安全,然后今天早上就编了个小软件干掉他这限制==> GoogleProxy.exe [主要目的:为了能在线安 ...
- 吐槽:基于PhoneGap开发移动项目
目前,随着Google的Android手机和苹果的iphone手机的逐渐普及,越来越多开发者加入到移动应用开发的大军当中.其中,Android应用是基于Java语言基础上进行开发的,而苹果公司的iph ...
- 利用select实现年月日三级联动的日期选择效果
× 目录 [1]演示 [2]规划 [3]结构生成[4]算法处理 前面的话 关于select控件,可能年月日三级联动的日期选择效果是最常见的应用了.本文是选择框脚本的实践,下面将对日期选择效果进行详细介 ...
- Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)
前面已经学习了 Cinder 的架构和相关组件,从本节我们开始详细分析 Cinder 的各种操作,首先讨论 Cinder 如何创建 volume. Create 操作流程如下: 客户(可以是 Open ...
- SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...
- 2.第一个Struts2程序-HelloWorld程序
1.新建Web Project项目:Study_Struts2 2.新建HelloWordAction.java类 3.复制struts.xml文件到src目录下,配置struts.xml文件内容如下 ...