欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-11 19:48:07
返回json时格式化日期date 第一步:创建customobjectmapper类 /** * 解决springmvc使用@responsebody返回...

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

效果如下:
格式化前

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

格式化后

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

进阶:返回自定义格式日期
使用@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>