一、Fegin远程调用服务端返回值为Map<List,Integer>的方法时,客户端无法正常接收到结果的问题
原因是因为map的key为List时,无法被序列化,导致远程调用时并不能传递正确的值,客户端无法反序列化得到值,客户端得到的结果为null。
解决办法:将Map<List,Integer> 改为Map<Object,Integer>或Map<Object,Object>,即可正常接收到结果。原因是Object没有被序列化为字节,而是转换为了String
- 复习序列化相关知识,序列化概念的产生就是为了支持Java语言的两种主要特性:
- Java的远程方法调用 RMI(Romote Method Invocation)
- 对象持久化,如JavaBeans,使用Bean时,需要在设计阶段对它的状态信息进行配置,状态信息必须被保存下来,以便程序启动时对其信息进行恢复
- 除通过实现Serializable接口完成序列化之外,如果并不希望对象中的某个字段被序列化,可以在对象的该字段前添加transient关键字;或者是只希望序列化对象中的部分字段,可实现Externalizable接口,对序列化进行一个自定义控制。
刚翻到一篇写的很不错的文章,这里分享一下,讲的很细,看完《Java编程思想》,再看下面作者的内容,受益匪浅,刷新了我对序列化的认知。力荐这篇文章。
Java序列化有什么作用?序列化与不序列化有什么区别? - CodeSheep程序羊的回答 - 知乎
https://www.zhihu.com/question/26475281/answer/1257699781