Spring Boot中对象序列化时机及RestTemplate调用微服务的序列化疑问
关于Spring Boot对象序列化的常见问题
1. Spring Boot中对象需要序列化的场景有哪些?
- 数据库缓存与远程传输:用JPA/Hibernate时,实体对象要存入二级缓存或通过RMI传输,得实现序列化;Redis、Ehcache这类分布式缓存存储对象,也需要把对象转成字节流。
- 跨服务/跨进程数据传递:通过Dubbo、RMI做远程调用传对象,或是用RabbitMQ、Kafka发消息对象,都离不开序列化。
- 分布式Session共享:把HttpSession里的对象存到Redis这类共享存储时,对象必须支持序列化。
- 对象深拷贝:有些深拷贝工具靠序列化机制来实现对象的完整复制。
2. 当使用RestTemplate向其他微服务发送数据时,请求对象与响应对象是否需要进行序列化?
是的,请求和响应对象都会经历序列化/反序列化过程:
- 发请求时,RestTemplate会把请求对象转成JSON(默认格式,也可配置成XML等)字节流,通过HTTP发给目标微服务。
- 收响应时,RestTemplate会把目标服务返回的字节流转回指定的响应对象类型,供业务代码使用。
- 这里不用手动实现
Serializable接口,因为RestTemplate默认用的是JSON序列化机制(比如Jackson消息转换器),不是Java原生序列化,但对象得满足消息转换器的要求,比如要有无参构造器、字段能被访问等。
内容的提问来源于stack exchange,提问作者Vishnupriya
相关产品推荐
相关产品推荐

