zoukankan      html  css  js  c++  java
  • SpringMVC对日期类型的转换

      在做web开发的时候,页面传入的都是String类型,SpringMVC可以对一些基本的类型进行转换,但是对于日期类的转换可能就需要我们配置。

    一种:  

    1、如果查询类使我们自己写,那么在属性前面加上@DateTimeFormat(pattern = "yyyy-MM-dd")  ,即可将String转换为Date类型,如下

    @DateTimeFormat(pattern = "yyyy-MM-dd")  
    private Date createTime;  

      1.2、如果我们只负责web层的开发,就需要在controller中加入数据绑定:

    1 @InitBinder  
    2 public void initBinder(WebDataBinder binder) {  
    3 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
    4 dateFormat.setLenient(false);  
    5 binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));   //true:允许输入空值,false:不能为空值 

    二种:

      3、可以在系统中加入一个全局类型转换器

      实现转换器

    复制代码
     1 public class DateConverter implements Converter<String, Date> {    
     2 @Override    
     3 public Date convert(String source) {    
     4     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");    
     5     dateFormat.setLenient(false);    
     6     try {    
     7         return dateFormat.parse(source);    
     8     } catch (ParseException e) {    
     9         e.printStackTrace();    
    10     }           
    11     return null;    
    12 }    
    复制代码

      进行配置:

    复制代码
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">    
            <property name="converters">    
                <list>    
                    <bean class="com.doje.XXX.web.DateConverter" />    
                </list>    
            </property>    
    </bean> 
    复制代码
    <mvc:annotation-driven conversion-service="conversionService" />  

      4、如果将日期类型转换为String在页面上显示,需要配合一些前端的技巧进行处理。

      5、SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳。

    复制代码
     1 @Component("customObjectMapper")  
     2 public class CustomObjectMapper extends ObjectMapper {  
     3   
     4     public CustomObjectMapper() {  
     5         CustomSerializerFactory factory = new CustomSerializerFactory();  
     6         factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {  
     7             @Override  
     8             public void serialize(Date value, JsonGenerator jsonGenerator,  
     9                     SerializerProvider provider) throws IOException, JsonProcessingException {  
    10                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    11                 jsonGenerator.writeString(sdf.format(value));  
    12             }  
    13         });  
    14         this.setSerializerFactory(factory);  
    15     }  
    16 }  
    复制代码

      配置如下:

    复制代码
    <mvc:annotation-driven>  
        <mvc:message-converters>  
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
                <property name="objectMapper" ref="customObjectMapper"></property>  
            </bean>  
        </mvc:message-converters>  
    </mvc:annotation-driven>  
    复制代码

      6、date类型转换为json字符串时,返回的是long time值,如果需要返回指定的日期的类型的get方法上写上@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") ,即可将json返回的对象为指定的类型。

    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")  
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")  
    public Date getCreateTime() {  
    return this.createTime;  
    }  
  • 相关阅读:
    js实现快速排序(in-place)简述
    手把手原生js简单轮播图
    基于superagent 与 cheerio 的node简单爬虫
    浅谈HTTP事务的一个过程
    css小技巧
    DesignPatternPrinciple(设计模式原则)二
    DesignPatternPrinciple(设计模式原则)一
    Attribute(特性)与AOP
    Thread(线程)四
    Thread(线程)三
  • 原文地址:https://www.cnblogs.com/watermelonban/p/7700203.html
Copyright © 2011-2022 走看看