Java Web程序中利用Spring框架返回JSON格式的日期

 更新时间:2016年05月25日 16:54:10   作者:hellostory  
这里我们来介绍一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat时要引入一个类库joda-time-版本.jar,否则会无法访问相应路径

返回Json时格式化日期Date
第一步:创建CustomObjectMapper类

/** 
 * 解决SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳的问题。需配合<mvc:message-converters>使用 
 */ 
@Component("customObjectMapper") 
public class CustomObjectMapper extends ObjectMapper { 
 
  public CustomObjectMapper() { 
    CustomSerializerFactory factory = new CustomSerializerFactory(); 
    factory.addGenericMapping(Date.class, new JsonSerializer<Date>() { 
      @Override 
      public void serialize(Date value, JsonGenerator jsonGenerator, 
          SerializerProvider provider) throws IOException, JsonProcessingException { 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        jsonGenerator.writeString(sdf.format(value)); 
      } 
    }); 
    this.setSerializerFactory(factory); 
  } 
} 

第二步:配置如下:

<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> 

效果如下:
格式化前

2016525164908927.png (231×51)

格式化后

2016525164931835.png (265×51)

进阶:返回自定义格式日期
使用@ResponseBody时返回json字符串的日期格式。Date类型属性默认返回一个Long型的时间戳,怎样能够返回自定义的日期格式?
解决方案:目前有两种方式实现,
1、局部修改(网上较多,但不推荐);
继承Jackson的抽象类:JsonSerializer<T>,然后在javabean的属性getter()上添加注解@JsonSerialize即可实现。
代码如下:

import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import org.codehaus.jackson.JsonGenerator; 
import org.codehaus.jackson.JsonProcessingException; 
import org.codehaus.jackson.map.JsonSerializer; 
import org.codehaus.jackson.map.SerializerProvider; 
 
/** 
 * @description 自定义返回JSON 数据格中日期格式化处理 
 */ 
public class CustomDateSerializer extends JsonSerializer<Date> { 
 
  @Override 
  public void serialize(Date value,  
      JsonGenerator jsonGenerator,  
      SerializerProvider provider) 
      throws IOException, JsonProcessingException { 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    jsonGenerator.writeString(sdf.format(value)); 
  } 
} 

使用方式: 

@JsonSerialize(using = CustomDateSerializer.class) 
public Date getCreateDate() { 
  return createDate; 
} 

2、全局修改(强烈推荐):
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。
代码如下:

import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import org.codehaus.jackson.JsonGenerator; 
import org.codehaus.jackson.JsonProcessingException; 
import org.codehaus.jackson.map.JsonSerializer; 
import org.codehaus.jackson.map.ObjectMapper; 
import org.codehaus.jackson.map.SerializerProvider; 
import org.codehaus.jackson.map.ser.CustomSerializerFactory; 
 
/** 
 * @description 解决Date类型返回json格式为自定义格式 
 */ 
public class CustomObjectMapper extends ObjectMapper { 
 
  public CustomObjectMapper(){ 
    CustomSerializerFactory factory = new CustomSerializerFactory(); 
    factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){ 
      @Override 
      public void serialize(Date value,  
          JsonGenerator jsonGenerator,  
          SerializerProvider provider) 
          throws IOException, JsonProcessingException { 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        jsonGenerator.writeString(sdf.format(value)); 
      } 
    }); 
    this.setSerializerFactory(factory); 
  } 
} 

spring-servlet.xml中配置:

<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> 
  <bean id="customObjectMapper" class="com.pmc.dwa.common.custom.CustomObjectMapper"></bean> 

相关文章

  • Java内部类_动力节点Java学院整理

    Java内部类_动力节点Java学院整理

    内部类是指在一个外部类的内部再定义一个类。下面通过本文给大家java内部类的使用小结,需要的朋友参考下吧
    2017-04-04
  • JAVA基于数组实现的商品信息查询功能示例

    JAVA基于数组实现的商品信息查询功能示例

    这篇文章主要介绍了JAVA基于数组实现的商品信息查询功能,结合实例形式详细分析了java使用数组存储数据实现的商品信息查询功能相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 教大家使用java实现顶一下踩一下功能

    教大家使用java实现顶一下踩一下功能

    这篇文章主要教大家如何使用java实现顶一下踩一下功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • java String、StringBuilder和StringBuffer的区别详解

    java String、StringBuilder和StringBuffer的区别详解

    这篇文章主要介绍了java String、StringBuilder和StringBuffer的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • java 中Spark中将对象序列化存储到hdfs

    java 中Spark中将对象序列化存储到hdfs

    这篇文章主要介绍了java 中Spark中将对象序列化存储到hdfs的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java中如何判断是否为闰年详细实例

    Java中如何判断是否为闰年详细实例

    所谓闰年就是指2月有29天的那一年,下面这篇文章主要给大家介绍了关于Java中如何判断是否为闰年的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Java对象的四种引用方式实例分析

    Java对象的四种引用方式实例分析

    这篇文章主要介绍了Java对象的四种引用方式,简单描述了四种引用方式的概念、应用场景并结合实例形式分析了弱引用所引用对象的垃圾回收过程,需要的朋友可以参考下
    2019-08-08
  • Java设计模式之命令模式(Command模式)介绍

    Java设计模式之命令模式(Command模式)介绍

    这篇文章主要介绍了Java设计模式之命令模式(Command模式)介绍,本文讲解了Command模式的定义、如何使用命令模式等内容,需要的朋友可以参考下
    2015-03-03
  • SpringBoot http请求注解@RestController原理解析

    SpringBoot http请求注解@RestController原理解析

    这篇文章主要介绍了SpringBoot http请求注解@RestController原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 浅谈spring 常用注解

    浅谈spring 常用注解

    这篇文章主要介绍了浅谈spring 常用注解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论