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>
效果如下:
格式化前
格式化后
进阶:返回自定义格式日期
使用@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 doGet, doPost方法和文件上传实例代码
下一篇: 第四节 练习8