核心思想
写一个自定义的类,继承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中定义不同的类型,就确定了,日期的格式