未进化的程序猿
人生最苦痛的是梦醒了无路可走。做梦的人是幸福的;倘没有看出可走的路,最要紧的是不要去惊醒他。鲁迅

一、配置方式1

1. 需求

在商品修改页面可以修改商品的生产日期,并且根据业务需求自定义日期格式。

2. 需求分析

由于日期数据有很多种格式,springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。

前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。可以在springmvc处理器适配器上自定义转换器Converter进行参数绑定。

一般使用<mvc:annotation-driven/>注解驱动加载处理器适配器,可以在此标签上进行配置。

3. 修改jsp页面

如下图修改itemEdit.jsp页面,显示时间

 注:通过前端<fmt/>标签可以设置页面日期的显示问题,就不会出现默认日期时间了,<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss" />

引入<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>头文件

4. 自定义Converter

package com.gmw.config;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class DateConverter implements Converter<String, Date>{

    @Override
    public Date convert(String source) {
        try {
            // 把字符串转换为日期类型
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = simpleDateFormat.parse(source);
            return date;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 如果转换异常则返回空
        return null;
    }
    
}

5. 配置Converter

    <!-- 使用<mvc:annotation-driven>替代注解处理器和适配器的配置。 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
    
    <!--转换器配置 -->
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.gmw.config.DateConverter"/>
            </set>
        </property>
    </bean>

二、配置方式2

<!--注解适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="webBindingInitializer" ref="customBinder"></property>
    </bean>

    <!--自定义webBinder -->
    <bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
        <property name="conversionService" ref="conversionService" />
    </bean>

    <!--转换器配置 -->
    <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.gmw.config.DateConverter" />
            </set>
        </property>
    </bean>
    
    <!-- 注解处理器映射器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

注意:此方法需要独立配置处理器映射器、适配器,不再使用<mvc:annotation-driven/>

三、配置方式3

1、实体类中加日期格式化注解 @DateTimeFormat

@DateTimeFormat(pattern = “yyyy-MM-dd”)  
private Date receiveAppTime; 

bean使用的jsonFormat与DateTimeFormat注解做转换,其中jsonFormat主要用作数据库时间类型java的date之前做转换,而DateTimeFormat用作前端传来的json数据中时间StringjavaBean的Date做转换

 很多时间转换数据错误的问题,大都是因为时区问题导致时间多加了8个小时,这只需要加上timezone = "GMT+8"做时区转换即可。

总结:

yyyy 年份 通常小写 当然大写也没关系 代表年度格式化

MM(大写) 大写的MM代表月份

dd 通常小写 大写也不会出错

HH (hh) HH代表24小时制的时间 hh代表转换为12小时的时间

mm(小写) 代表分钟

ss 通常小写 代表秒的转换

对于以上可以看出 大小写主要是为了区别月份与分钟以及时间24小时制度,其他情况一般小写规范。

我这里犯的错也是将分钟数转化为了月份,转化后的时间就变成了两年后了。

四、配置方式4

@InitBinder
public void initBinder(WebDataBinder binder) {
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));
}

 

posted on 2020-11-27 09:35  甘茂旺  阅读(191)  评论(0编辑  收藏  举报