1、SpringMVC使用@ResponseBody時返回json的日期格式html
前提了解: @ResponseBody 返回json字符串的核心類是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 這個開源的第三方類庫。主要是如下兩個jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar。前端
出現問題: 使用@ResponseBody時返回json字符串的日期格式。Date類型屬性默認返回一個Long型的時間戳,怎樣可以返回自定義的日期格式?java
解決方案:目前有兩種方式實現,spring
一、局部修改json
(1) 繼承Jackson的抽象類:JsonSerializer<T>,而後在javabean的屬性getter()上添加註解@JsonSerialize便可實現。springboot
Java代碼 mvc
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; public class Date2LongSerializer 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)); } }
使用方式:app
Java代碼 ide
@JsonSerialize(using = Date2LongSerializer.class) private Date createTime; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date updateTime;
(2)使用@JsonFormat註解this
例如:@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date updateTime;
(3)或者修改spring配置文件,這樣會對全部的Date類型轉化爲前臺須要的json字符串都有效:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
(3)若是須要的轉化爲long類型的格式
java代碼:
public class Date2LongSerializer extends JsonSerializer<Date> { @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { // DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // jsonGenerator.writeString(format.format(date)); jsonGenerator.writeNumber(date.getTime());//獲取時間對應的毫秒數 //若是須要返回給前臺的是秒,那麼使用getTime()/1000便可,以下: //jsonGenerator.writeNumber(date.getTime()/1000); } }
二、全局修改(強烈推薦):
MappingJacksonHttpMessageConverter主要經過ObjectMapper來實現返回json字符串。這裏咱們繼承該類,註冊一個JsonSerializer<T>。而後在配置文件中注入自定義的ObjectMapper。
Java代碼
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格式爲自定義格式 * @author aokunsang * @date 2013-5-28 */ 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中配置:
Java代碼
<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>
2、前段頁面傳遞過來日期字符串怎麼轉換爲日期類型,使用@DatetimeFormat
例如:前端提交日期的json,格式爲2018-07-26,日期字段但願能自動填充到後臺controller方法的Date對象裏。解決方法:
@DateTimeFormat(pattern = "yyyy-MM-dd")//接收前臺字符串爲yyyy-MM-dd格式轉化爲日期類型 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")//後臺轉化爲json輸出到前臺的格式 private Date updateTime;
https://www.cnblogs.com/liaojie970/p/9396334.html