Java对象中时间格式JSON序列化的处理
Java对象中时间格式 JSON序列化的处理
今天有个数据存es的需求。数据⼊es之前需要先进⾏JSON序列化输出,便于开发校验数据正确与否。同时也能确保⼊ES的数据正确与否。
以下这个⽅案只能作为⼀个解决问题的尝试思路,因为Spring家族的序列化设置⼀直在变,2.5.3版本就有了个 spring.mvc.format.* 配置。
// 基础实体
@Builder
public class DemoEntity {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate localDate;
@JsonFormat(pattern = "HH:mm:ss")
@DateTimeFormat(pattern = "HH:mm:ss")
private LocalTime localTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date dateTime;
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date date;
@JsonFormat(pattern = "HH:mm:ss")
@DateTimeFormat(pattern = "HH:mm:ss")
private Date time;
}
问题⽅案⼀: fastJSON
由阿⾥开源的fastJSON,使⽤简单⽆脑。但是并⽆法事项我们所需的效果。针对LocalDateTime的序列化⽆法指定格式,且会把对象值为null的属性删掉。(例如:如果有的People对象的sex属性为null,那么序列化的json会没有sex这个key。创建时间设置类型为LocalDateTime,那么序列化的字符串必定为 "yyyy-MM-dd'T'HH:mm:ss" 格式。
// 伪代码
System.out.LocalDateTime()));
/
/ 效果: *** "localDateTime":"2021-07-06T11:19:26" **
成功⽅案⼆:jackSon,Spring Mvc默认内置使⽤。
import com.alibaba.fastjson.JSON;
import com.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
log4j.Log4j2;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Date;
/**
* @author ListJiang
java时间日期格式转换* @since 2021/8/6 14:31
* description
*/
@RestController
@Log4j2
public class Demo {
@RequestMapping("/elastic/test")
public DemoEntity test(@RequestBody DemoEntity demoEntity) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
// 未执⾏改⽅法 localDateTime 会序列化为Json对象⽽不是指定格式字符串
objectMapper.findAndRegisterModules();
System.out.println("fastJson:    " + JSONString(demoEntity));
System.out.println("jackson:    " + objectMapper.writeValueAsString(demoEntity));
return new w(), w(),
new Date(),
new Date(),
new Date());
}
}
// 效果:
// fastJson:    {"date":1628179200000,"dateTime":1628232915000,"localDate":"2021-08-06","localDateTime":"2021-08-06T14:55:15","localTime":"14:55:15","time":24915000}
// jackson:    {"localDateTime":"2021-08-06 14:55:15","localDate":"2021-08-06","localTime":"14:55:15","dateTime":"2021-08-06 06:55:15","date":"2021-08-05","time":"06:55:15"}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。