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