SPRINGMVC setting global datetime JSON return format

Source: Internet
Author: User

For a partially returned datetime item, simply add @jsonserialize on the specified property to customize the return datetime format using a custom JSON conversion format

However, the above method is obviously not applicable for multiple DateTime fields returned in the project, and you need to customize the global datetime converter:

1. Configuration file:

<!--uses SPRINGMVC's own JSON conversion tool to support @responsebody annotation--><beanclass= " Org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter "><property name=" Messageconverters "><list><ref bean=" Mappingjacksonhttpmessageconverter "/></list></ Property></bean>   <!--avoid IE when performing Ajax, return json appears download file--><bean id= " Mappingjacksonhttpmessageconverter "Class=" Org.springframework.http.converter.json.MappingJackson2HttpMessageConverter "><property name=" Supportedmediatypes "><list><value>application/json;charset=utf-8</value><value>text /html;charset=utf-8</value></list></property><property name= "ObjectMapper" ><bean class= "Com.cml.mvc.framework.converter.DateTimeConverter" ></bean></property></bean>

Mostly custom Objectmapper in Mappingjacksonhttpmessageconverter


2. Download the required jar

               <dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId> Jackson-datatype-joda</artifactid><version>${jackson.mapper}</version></dependency>

3, the realization of their own objectmapper

public class Datetimeconverter extends Objectmapper {private static final long Serialversionuid = 1l;public Datetimeconver ter () {This.registermodule (New Basejodamodule ()); This.configure (Serializationfeature.write_dates_as_timestamps, false);}}

Basejodamodule mainly modifies the Com.fasterxml.jackson.datatype.joda.JodaModule code by passing in the custom date format on the datetime registration converter.

4, Basejodamodule

Package Com.cml.mvc.framework.converter.datetime;import Org.joda.time.datemidnight;import Org.joda.time.DateTime; Import Org.joda.time.datetimezone;import Org.joda.time.duration;import Org.joda.time.instant;import Org.joda.time.interval;import Org.joda.time.localdate;import Org.joda.time.localdatetime;import Org.joda.time.localtime;import Org.joda.time.monthday;import Org.joda.time.period;import Org.joda.time.readabledatetime;import Org.joda.time.readableinstant;import Org.joda.time.readableperiod;import Org.joda.time.yearmonth;import Org.joda.time.format.datetimeformat;import Com.fasterxml.jackson.databind.jsondeserializer;import Com.fasterxml.jackson.databind.jsonserializer;import Com.fasterxml.jackson.databind.module.simplemodule;import Com.fasterxml.jackson.databind.ser.std.tostringserializer;import Com.fasterxml.jackson.datatype.joda.packageversion;import Com.fasterxml.jackson.datatype.joda.cfg.jacksonjodadateformat;import Com.fasterxml.jackson.datatype.joda.deser.DateMidnightDeserIalizer;import Com.fasterxml.jackson.datatype.joda.deser.datetimedeserializer;import Com.fasterxml.jackson.datatype.joda.deser.datetimezonedeserializer;import Com.fasterxml.jackson.datatype.joda.deser.durationdeserializer;import Com.fasterxml.jackson.datatype.joda.deser.instantdeserializer;import Com.fasterxml.jackson.datatype.joda.deser.intervaldeserializer;import Com.fasterxml.jackson.datatype.joda.deser.localdatedeserializer;import Com.fasterxml.jackson.datatype.joda.deser.localdatetimedeserializer;import Com.fasterxml.jackson.datatype.joda.deser.localtimedeserializer;import Com.fasterxml.jackson.datatype.joda.deser.monthdaydeserializer;import Com.fasterxml.jackson.datatype.joda.deser.perioddeserializer;import Com.fasterxml.jackson.datatype.joda.deser.yearmonthdeserializer;import Com.fasterxml.jackson.datatype.joda.deser.key.datetimekeydeserializer;import Com.fasterxml.jackson.datatype.joda.deser.key.localdatekeydeserializer;import Com.fasterxml.jackson.datatype.joda.deser.key.LocalDatetimekeydeserializer;import Com.fasterxml.jackson.datatype.joda.deser.key.localtimekeydeserializer;import Com.fasterxml.jackson.datatype.joda.ser.datemidnightserializer;import Com.fasterxml.jackson.datatype.joda.ser.datetimeserializer;import Com.fasterxml.jackson.datatype.joda.ser.datetimezoneserializer;import Com.fasterxml.jackson.datatype.joda.ser.durationserializer;import Com.fasterxml.jackson.datatype.joda.ser.instantserializer;import Com.fasterxml.jackson.datatype.joda.ser.intervalserializer;import Com.fasterxml.jackson.datatype.joda.ser.localdateserializer;import Com.fasterxml.jackson.datatype.joda.ser.localdatetimeserializer;import Com.fasterxml.jackson.datatype.joda.ser.localtimeserializer;import Com.fasterxml.jackson.datatype.joda.ser.PeriodSerializer; @SuppressWarnings ("Deprecation") public class Basejodamodule extends Simplemodule {private static final long Serialversionuid = 1l;public static final String date_time_ PATTERN = "Yyyymmddhhmmss";p rivate static final JacksonjodaDateFormat date_time_formatter = new Jacksonjodadateformat (Datetimeformat.forpattern (DATE_TIME_PATTERN). WITHZONEUTC ()); @SuppressWarnings ({"Unchecked"}) public Basejodamodule () {super (packageversion.version);//First Deserializersadddeserializer (Datemidnight.class, New Datemidnightdeserializer ()); Adddeserializer (DateTime.class, Datetimedeserializer.fortype (Datetime.class)); Adddeserializer (Datetimezone.class, New DateTimeZoneDeserializer () ); Adddeserializer (Duration.class, New Durationdeserializer ()); Adddeserializer (Instant.class, new Instantdeserializer ()); Adddeserializer (Localdatetime.class, New Localdatetimedeserializer ()); AddDeserializer ( Localdate.class, New Localdatedeserializer ()); Adddeserializer (Localtime.class, New Localtimedeserializer ()); jsondeserializer<?> Deser = new Perioddeserializer (true); Adddeserializer (Period.class, JsonDeserializer< period>) deser) Adddeserializer (Readableperiod.class, new Perioddeserializer (false)); Adddeserializer ( Readabledatetime.class,dateTimedeserializer.fortype (Readabledatetime.class)); Adddeserializer (Readableinstant.class, Datetimedeserializer.fortype (Readableinstant.class)); Adddeserializer (Interval.class, New IntervalDeserializer ()) ; Adddeserializer (Monthday.class, New Monthdaydeserializer ()); Adddeserializer (Yearmonth.class, new Yearmonthdeserializer ());/Then serializers:final jsonserializer<object> stringser = Tostringserializer.instance;addserializer (Datemidnight.class, New Datemidnightserializer ());
//mainly modifies this , Custom date format 
Addserializer (Datetime.class, New Datetimeserializer (Date_time_formatter)); Addserializer (DateTimeZone.class, new Datetimezoneserializer ()); Addserializer (Duration.class, New Durationserializer ()); Addserializer (Instant.class, New Instantserializer ()); Addserializer (Localdatetime.class, New Localdatetimeserializer ()); Addserializer ( Localdate.class, New Localdateserializer ()); Addserializer (Localtime.class, New Localtimeserializer ()); Addserializer (Period.class, New Periodserializer ()); Addserializer (Interval.class, New Intervalserializer ()); Addserializer (Monthday.class, Stringser); Addserializer (Yearmonth.class, Stringser);/Then key Deserializersaddkeydeserializer (Datetime.class, New Datetimekeydeserializer ()); Addkeydeserializer ( Localtime.class, New Localtimekeydeserializer ()); Addkeydeserializer (Localdate.class, New Localdatekeydeserializer ( )); Addkeydeserializer (Localdatetime.class,new Localdatetimekeydeserializer ());} Yes, would try to avoid duplicate registations (if mapperfeature enabled)@Overridepublic String Getmodulename () {return getclass (). Getsimplename ();} @Overridepublic int hashcode () {return getclass (). Hashcode ();} @Overridepublic boolean equals (Object o) {return this = = O;}}
Custom global datetime JSON format OK, but personally feel too complex, set a date format, to configure, to implement so many steps!looking for a simpler global configuration ...




SPRINGMVC setting global datetime JSON return format

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.