Spring Boot 日期数据格式转换@JsonFormat实例

pojo的bean里面通常会有Date类型的数据,直接通过@ResponseBody返回出去的是一个长整型时间戳(从1970到该变量时间的毫秒数),关于原因,网上很多,此处不细讲。如果想要返回自定义的日期格式,如:yyyymmddhhmmss,需做相关处理,网上有很多处理方式,大体都是继承、重写,比较复杂。实际上JSON已有注解@JsonFormat支持,使用实例:

@JsonFormat(timezone = "GMT+8",pattern = "yyyyMMddHHmmss")
private Date createTime;

作用:1)入参时,请求报文只需要传入yyyymmddhhmmss字符串进来,则自动转换为Date类型数据。2)出参时,Date类型的数据自动转换为14位的字符串返回出去。

详细可参阅:http://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonFormat.html

相关的其他注解:

@JsonIgnoreProperties 此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。 @JsonIgnoreProperties(value = { "word" })
@JsonIgnore 此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。
@JsonSerialize 此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。 @JsonSerialize(using = CustomDoubleSerialize.class)
@JsonDeserialize 此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize @JsonDeserialize(using = CustomDateDeserialize.class)

Spring Boot中全局设置JSON日期格式主要通过配置`HttpMessageConverters`来实现,通常使用`MappingJackson2HttpMessageConverter`来定制JSON的序列化和反序列化规则。以下是具体的步骤: 1. 创建一个配置类,并使用`@Configuration`注解标注该类为Spring配置类。 2. 在配置类中使用`@Bean`注解创建并返回一个`MappingJackson2HttpMessageConverter`的Bean实例。 3. 在该实例中获取到`ObjectMapper`对象,然后配置`ObjectMapper`的`dateFormat`属性。你可以设置为`SimpleDateFormat`,并指定你希望的日期格式。 4. 将这个`MappingJackson2HttpMessageConverter`实例添加到`HttpMessageConverters`中。 下面是一个简单的代码示例: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); // 设置日期时间格式 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); DateTimeFormatter datetimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); JavaTimeModule module = new JavaTimeModule(); module.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter)); module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(datetimeFormatter)); module.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormatter)); module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(datetimeFormatter)); objectMapper.registerModule(module); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); converter.setObjectMapper(objectMapper); converters.add(converter); } } ``` 在上面的配置中,`yyyy-MM-dd`和`yyyy-MM-dd HH:mm:ss`分别是日期日期时间的格式化字符串。通过自定义`DateTimeFormatter`和`JavaTimeModule`,我们可以指定日期和时间的序列化和反序列化方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值