分享知识-快乐自己:SpringMvc中 页面日期格式到后台的类型转换
2021-06-19 20:03
YPE web->
标签:obj path Servle -- ignore 升级版 class 转换 字符串
日期格式的类型转换:
以往在 from 表单提交的时候,都会有字符串、数字、还有时间格式等信息。 往往如果是数字提交的话底层会自动帮我们把类型进行了隐式转换。
但是日期格式的却不能自动转换,这就需要我们自己来处理。这里介绍三种方式转换。
案例目录结构:
各类中的内容及配置:
ControllerWelcome 类:
package controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import java.text.SimpleDateFormat; import java.util.Date; /** * @author asus */ @Controller @RequestMapping("/user") public class ControllerWelcome{ @RequestMapping("/index") public ModelAndView demo(String userName, String userPwd, Date date) { String format = new SimpleDateFormat("yyyy-MM-dd").format(date); System.out.println(format); System.out.println("userName:>"+userName); System.out.println("userName:>"+userPwd); System.out.println("userName:>"+date); ModelAndView modelAndView=new ModelAndView("Welcome"); modelAndView.addObject("a",userName); modelAndView.addObject("b",userPwd); modelAndView.addObject(date); return modelAndView; } }
Spring-view.xml 配置文件:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> package="controller"/> class="org.springframework.web.servlet.view.InternalResourceViewResolver">
web.xml 配置:
span>app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >Archetype Created Web Application encodingFilter class>org.springframework.web.filter.CharacterEncodingFilter class>encoding UTF-8 forceEncoding true encodingFilter /* mvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath*:Spring-*.xml 1 mvc /
index.jsp 页面:
Welcome.jsp 页面
Title 用户名:${a} 密码:${b} 日期:${date}
在这之前我们情趣提交 from 表单的时候肯定会报错,因为入参的类型不匹配,无法转换Date类型。(默认为 2018/05/05 格式可以自动转换,但是 2018-05-05、... 就不能转换了会报如下图所示的错:)
下面我们来看第一种处理方式:基于XML 配置的方式
添加自定义类型转换类:
package uitl; import org.springframework.beans.TypeMismatchException; import org.springframework.core.convert.converter.Converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.SimpleFormatter; import java.util.regex.Pattern; /** * 自定义类型转换 * @author asus */ public class MyConvertDate implements Converter{ @Override public Date convert(String source) { SimpleDateFormat simpleDateFormat = getDate(source); Date date = null; try { date = simpleDateFormat.parse(source); } catch (ParseException ex) { ex.printStackTrace(); } return date; } private SimpleDateFormat getDate(String source) { SimpleDateFormat simpleDateFormat = null; if (Pattern.matches("\\d{4}/\\d{2}/\\d{2}",source)) { simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd"); } else if (Pattern.matches("\\d{4}-\\d{2}-\\d{2}",source)) { simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); } else if (Pattern.matches("\\d{4}\\d{2}\\d{2}",source)) { simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); } else { throw new TypeMismatchException("", Date.class);//三种类型不匹配则报异常 } return simpleDateFormat; } }
添加 Spring-conversion.xml 配置文件:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> class="uitl.MyConvertDate"/> class="org.springframework.context.support.ConversionServiceFactoryBean">
输入我们自定义的三种格式都可以转换。
下面我们来看第二种处理方式:使用@InitBinder装配自定义编辑器(使用第二种就不要上述的配置文件了)
添加一个编辑器类:BaseControllerDate
package controller; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import uitl.MyEditor; import java.text.SimpleDateFormat; import java.util.Date; /** * 使用@InitBinder装配自定义编辑器 * @author asus */ public class BaseControllerDate{ /** * 在服务器启动的时候就会加载该方法 * @param */ @InitBinder public void initBinder(WebDataBinder webDataBinder) { System.out.println("InitBinder装配自定义编辑器父级的我被加载了------------"); webDataBinder.registerCustomEditor (Date.class,new CustomDateEditor( new SimpleDateFormat("yyyy-MM-dd"),true)); } }
让Controller 层去集成 BaseControllerDate 类。但是这种方式也只能实现一种格式,有局限性。
下面我们来看第三种处理方式:使用@InitBinder装配自定义编辑器升级版+编辑器类
添加:MyEditor 类:
package uitl; import org.springframework.beans.propertyeditors.PropertiesEditor; import org.springframework.beans.TypeMismatchException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Pattern; /** * 自定义编辑器 * @author asus */ public class MyEditor extends PropertiesEditor { @Override public void setAsText(String source) throws IllegalArgumentException { SimpleDateFormat sdf=getDate(source); Date date=null; try { date = sdf.parse(source); setValue(date); } catch (ParseException e) { e.printStackTrace(); } } private SimpleDateFormat getDate(String source) { SimpleDateFormat sdf=null; if (Pattern.matches("\\d{4}/\\d{2}/\\d{2}",source)){ sdf=new SimpleDateFormat("yyyy/MM/dd"); }else if (Pattern.matches("\\d{4}-\\d{2}-\\d{2}",source)){ sdf=new SimpleDateFormat("yyyy-MM-dd"); }else if(Pattern.matches("\\d{4}\\d{2}\\d{2}",source)){ sdf=new SimpleDateFormat("yyyyMMdd"); }else { throw new TypeMismatchException("",Date.class); } return sdf; } }
修改 BaseControllerDate类为:
@InitBinder public void initBinder(WebDataBinder wdb){ System.out.println("----------------"); wdb.registerCustomEditor(Date.class,new MyEditor()); }
以上就是对日期格式类型的转换,若有不足之处请多多指教;
分享知识-快乐自己:SpringMvc中 页面日期格式到后台的类型转换
标签:obj path Servle -- ignore 升级版 class 转换 字符串
原文地址:https://www.cnblogs.com/mlq2017/p/9690128.html
文章标题:分享知识-快乐自己:SpringMvc中 页面日期格式到后台的类型转换
文章链接:http://soscw.com/index.php/essay/96091.html