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