Json转换中Date那点事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json转换中Date那点事相关的知识,希望对你有一定的参考价值。
参考技术A Java Bean传递过程中Date的格式化过程中时区的处理是一件非常恼人的事情。相信碰到过相关问题的同学应该深有体会。笔者最近也是频频采坑,终于略有收获虽然未能大彻大悟但对付平时开发应该绰绰有余,感兴趣的同学可以持续关注后面进展会持续更新。首先进入正题前要说明两点,一个是时区的出现只是为了适应不同的地区的本地化时间展示应运而生的他不应该改变绝对的时间,再一个是new Date产生的长整数是一个从 格林威治时间(0时区)1970年1月1日 起的毫秒数的时间戳。换句话说全世界的程序员同时new Date()得到的这个时间戳应该是一致的,这个就是我所谓的一个绝对时间。我们看到的北京时间上午八点也好,伦敦时间凌晨0点也好只是把这个绝对时间换算成当地时间得到的一个展示形式。
JSON的Date传递过程中通常有两种方式一种是直接传递Date的13位长的时间戳,一种是传递格式化后的类似2019-05-06 11:31:13.708型的字符串。两种方式各有优劣吧,其中传递格式化后的字符串比较直观但是需要处理时区问题,传递时间戳不太直观但是不需要处理时区问题。
假如要传递格式化后的字符串通常需要在序列化的属性上加上@JsonFormat(timezone ="UTC", pattern ="yyyy-MM-dd HH:mm:ss.S")的注解,在序列化过程中表示需要将date 格式化为UTC时区的yyyy-MM-dd HH:mm:ss.S形式,在反序列化中JackJson会将收到的yyyy-MM-dd HH:mm:ss.S字符串理解为UTC时区的时间串这会对最终反序列化后的date时间有直接影响。
如果序列化和反序列化的时区不一致,可以再getter和setter上设置不同的时区表示避免因时区不同造成偏差。
如果可以的话最好传递字符串,可以避免处理时区问题。如果必须传递格式化后的时间表示,最好在最后一层的服务处理。
微服务那点事
今天用到了RestTemplate,提供了多种便捷远程访问http服务的方法。br/>是一种简洁的访问restful服务模板类,是spring提供的用于访问客户端的模板工具集。
使用时要携带三个参数:(url,requestMap,ResponseBean.class)
分别是rest的请求地址,传入的参数,http响应转换被转换的类型
@Configuration
public class Configbean {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
controller层
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept) {
return restTemplate.postForObject(REST_URL_PREFIX, dept, Boolean.class);
}
以上是关于Json转换中Date那点事的主要内容,如果未能解决你的问题,请参考以下文章