因此,序列化存在一些问题,有些问题很容易,但我学到了一些可以帮助其他人解决这个问题以及对案例类的理解的东西。
首先,我使用 javap(.exe) 从类文件中查看 java 代码,到包含名为 Job 的案例类的 Job.scala,有两个类文件:Job$.class 和 Job.class。
工作$.class:
public final class logic.Queue.Task.Job$ extends scala.runtime.AbstractFunction4<java.lang.Object, java.lang.String, scala.collection.immutable.List<logic.Job.TaskRequest>, org.Server.Job.TaskContainer, logic.Queue.Task.Job> implements scala.Serializable {
public static final logic.Queue.Task.Job$ MODULE$;
public static {};
public final java.lang.String toString();
.
.
.
}
作业类:
public class logic.Queue.Task.Job implements scala.Product,scala.Serializable {
public static org.Server.Job.TaskContainer apply$default$4();
public static scala.collection.immutable.List<logic.Job.TaskRequest> apply$default$3();
.
.
.
}
这意味着 scala 案例类是一个匿名内部类,当你尝试序列化它时(你可以,因为两者都实现了 scala.Serializable),我通过添加到签名来解决它:
@JsonAutoDetect
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@JsonCreator
case class Job(stat: Int = CmsTypeMsg.Pending, jobName: String = "", taskRequestIn: List[TaskRequest] = Nil, taskIn: TaskContainer = new TaskContainer())
有关此问题的更多帮助:
http: //www.jpalomaki.fi/?p=
527 使用 Jackson 将 Json 反序列化为另一个类层次结构