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
原创粉丝点击