java.io.InvalidClassException 序列化与反序列化对象错误(Serializable)

最近遇到了一个问题反序列化错误,以前也实现过序列化接口,但是从来没有报过序列化错误,后来想了一下原因,之前的序列化和反序列化全都是在一个项目中进行的,也就是针对一个项目的对象进行序列化和反序列化。
但是这一次我的项目是一个分布式的服务,使用MQ来传递消息,这时遇到了反序列化的错误。本地的UID和远程的UID不一样:
java.io.InvalidClassException 序列化与反序列化对象错误(Serializable)_第1张图片
怎么样进行序列化和反序列化?

java通过包名,类名,字段名,方法名等来进行序列化并标识它,所以在进行反序列化的时候也是通过包名,类名,字段名,方法名来进行反序列化一旦路径或者是名称不一样了反序列化就会报错,所以,,,

  • 序列化与反序列化的对象必须一模一样(包括路径)。类名一样,同样实现序列化接口Serializable,字段一样,方法一样,包路径也要一样。
  • 对象加上序列化的UID。两个序列化的对象UID要相同(不加也行)。
private static final Long serialVersionUID = 42L; //序列化的UID
  • 治标不治本的方法,不推荐,这样做也会增大开销。把对象转换成Json字符串,然后传递,解析的时候再把Json字符串转换成对象。

你可能感兴趣的:(#,java,java,spring,boot)