springMVC 在controller中将参数封装成对象--日期格式处理问题
来源:互联网 发布:linux路由器搭建局域网 编辑:程序博客网 时间:2024/05/17 06:02
核心思想
写一个自定义的类,继承java.text.SimpleDateFormat,自己处理两种日期的格式
package util;import java.text.AttributedCharacterIterator;import java.text.DateFormatSymbols;import java.text.FieldPosition;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.commons.lang3.StringUtils;import com.fasterxml.jackson.databind.ObjectMapper;import util.Demo;/** * @description: <br/> * @version: 1<br/> * @package com.momfo.manger.util.MyDateFormat.java * @author YangPu * @date 2017年4月24日 下午4:39:12 */public class MyDateFormat extends SimpleDateFormat { private static final long serialVersionUID = 1L; private final static String pattern1 = "yyyy-MM-dd"; private final static String pattern2 = "yyyy-MM-dd HH:mm:ss"; // 年月日的格式化 private static SimpleDateFormat ymd = new SimpleDateFormat(pattern1); // 年月日时分秒的格式化 // 默认的格式化 private static SimpleDateFormat ymdhms = new SimpleDateFormat(pattern2); public static void main(String[] args) throws Exception { String d1 = "2017-01-01"; String d2 = "2017-01-01 12:12:12"; ObjectMapper om = new ObjectMapper(); String json0 = "{\"my09\":\"2017-01-01\",\"my091\":\"2017-01-01\"}"; String json1 = "{\"my09\":\"2017-01-01\",\"my091\":\"2017-01-01 08:00:00\"}"; String json2 = "{\"my09\":\"2017-01-01 08:00:00\",\"my091\":\"2017-01-01\"}"; String json3 = "{\"my09\":\"2017-01-01 08:00:00\",\"my091\":\"2017-01-01 08:00:00\"}"; om.setDateFormat(new MyDateFormat()); Demo d = null; d = om.readValue(json0, Demo.class); System.out.println(om.writeValueAsString(d)); d = om.readValue(json1, Demo.class); System.out.println(om.writeValueAsString(d)); d = om.readValue(json2, Demo.class); System.out.println(om.writeValueAsString(d)); d = om.readValue(json3, Demo.class); System.out.println(om.writeValueAsString(d)); } // 默认的格式化 public MyDateFormat() { this(pattern2); } public MyDateFormat(String pattern) { super(pattern); } public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) { System.out.println("format"); if (date instanceof java.sql.Date) { return ymd.format(date, toAppendTo, pos); } else if (date instanceof java.sql.Timestamp) { return ymdhms.format(date, toAppendTo, pos); } // 可以自定义自己的数据格式 return ymdhms.format(date, toAppendTo, pos); } @Override public void set2DigitYearStart(Date startDate) { System.out.println("set2DigitYearStart"); super.set2DigitYearStart(startDate); } @Override public Date get2DigitYearStart() { System.out.println("get2DigitYearStart"); return super.get2DigitYearStart(); } @Override public AttributedCharacterIterator formatToCharacterIterator(Object obj) { System.out.println("formatToCharacterIterator"); return super.formatToCharacterIterator(obj); } @Override public Date parse(String text, ParsePosition pos) { System.out.println("parse"); if (StringUtils.isNotEmpty(text)) { // 2017-01-01 12:13:14 if (text.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2}")) { return ymdhms.parse(text, pos); } else if (text.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) { // 2017-01-01 return ymd.parse(text, pos); } // 可以自定义自己的数据格式 } return super.parse(text, pos); } @Override public String toPattern() { System.out.println("toPattern"); return super.toPattern(); } @Override public String toLocalizedPattern() { System.out.println("toLocalizedPattern"); return super.toLocalizedPattern(); } @Override public void applyPattern(String pattern) { System.out.println("applyPattern"); super.applyPattern(pattern); } @Override public void applyLocalizedPattern(String pattern) { System.out.println("applyLocalizedPattern"); super.applyLocalizedPattern(pattern); } @Override public DateFormatSymbols getDateFormatSymbols() { System.out.println("getDateFormatSymbols"); return super.getDateFormatSymbols(); } @Override public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols) { System.out.println("setDateFormatSymbols"); super.setDateFormatSymbols(newFormatSymbols); } @Override public Object clone() { return super.clone(); } @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(Object obj) { return super.equals(obj); }}**辅助类**package util;import java.io.Serializable;import java.sql.Date;import java.sql.Timestamp;/** * @Model<br> * @className:ProjectInfo<br> * @auto-generated<br> */public class Demo implements Serializable { private static final long serialVersionUID = 1L; // @JsonFormat(pattern = "yyyy-MM-dd") private Date my09; // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Timestamp my091; public Date getMy09() { return my09; } public Timestamp getMy091() { return my091; } public void setMy091(Timestamp my091) { this.my091 = my091; } public void setMy09(Date my09) { this.my09 = my09; }}**spring的配置文件**<mvc:annotation-driven validator="validator" conversion-service="conversionService"> <mvc:message-converters > <ref bean="mappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven><!--对ajax提交,数据封装到requestBody中有效--><bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="util.MyDateFormat"> </bean> </property> </bean> </property> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!--这种对form表单提交,get提交有效--><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="util.DateConverter" /> <bean class="util.TimestampConverter" /> </list> </property> </bean>
总结
使用这种方式,就不必在每一个model中写注解来定义date的格式,
系统就直接定义:java.sql.date格式为:yyyy-MM-dd
系统就直接定义:java.sql.Timestamp格式为:yyyy-MM-dd HH:mm:ss
只需要在model中定义不同的类型,就确定了,日期的格式
0 0
- springMVC 在controller中将参数封装成对象--日期格式处理问题
- springMVC 在controller中将参数封装对象
- NSNumber 封装成对象
- NSValue 封装成对象
- JavaScript跨浏览器处理事件方法(封装成对象)
- 【poi】 poi封装成对象
- javascript中将值转换成对象
- springMVC自动获取jsp页面input中的值,封装成对象传入后台
- Spark-Streaming处理Kafka数据——封装成对象处理
- springmvc ajax-json提交 多个参数提交并转化成对象
- 将SQL查询封装成对象查询
- BaseMode 数据的封装成对象
- 将配置文件中分属性封装成对象
- 将配置文件中分属性封装成对象
- js封装成对象的例子
- js封装成对象的例子
- 将form表单封装成对象
- xml封装成对象(1-1)
- 《JQuery基础教程》第二章摘记
- centos系统安装openstack—dashboard安装和展示
- ffmpeg源码简析(四)avcodec_find_encoder(),avcodec_open2(),avcodec_close()
- 集合框架-键盘录入多个数据,以0结束,并在控制台输出最大值
- MyBatis学习 之 四、MyBatis配置文件
- springMVC 在controller中将参数封装成对象--日期格式处理问题
- java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setTe
- iOS中 性能优化之浅谈load与initialize 韩俊强的博客
- NSAssert(断言)
- ecplise当中配置maven
- [JZOJ5085]游戏/[JZOJ3996]下棋
- docx格式之指定位置插入图片(图片复制)
- tomcat端口被占用
- Linux学习——指令(持续更新)