首页 > 解决方案 > 在反序列化期间将 POJO 映射到具有不可变列表的案例类

问题描述

我来自 Java 背景并试图了解如何在 Scala 中建模域类/POJO。

我正在尝试反序列化来自 RestAPI 的 JSON 响应,我的 Java POJO 如下:

@Data
public class ColumnResponse {
    private String id;
    private String name;
    private String type;
    ...
}

ķ

@Data
public class DataSetGetResponse {
    private String id;
    private List<ColumnResponse> columns;
    ...
}

现在我创建了以下案例类

case class DataSetGetResponse (id: String,
                               columns: List[ColumnResponse]
                              .... )


case class ColumnResponse (id: String,name: String ...)

我正在尝试使用https://sttp.readthedocs.io/en/latest/json.html#json4s库进行 HTTP 通信,使用 json4s 进行反序列化。

问题:

1)在DataSetGetResponse案例类中,字段“columns”是一个List。默认情况下这是一个不可变的列表。反序列化库如何将新的 DataColumnGetResponse 对象添加到这个不可变列表中?我必须将其声明为 mutable 吗?

2) ColumnResponse POJO 中有一个名为'type' 字段的字段。在 Scala 中,'type' 是保留关键字。如何处理这种情况?

标签: javascalaimmutabilitycase-classjson4s

解决方案


回答第一个:

不可变对象可以使用以下copy函数进行变异:

dataSet.copy(columns = newResp :: dataSet.columns)

对于更复杂的任务,您可以使用镜头,请参见此处的示例:在此处输入链接描述

回答第二个:

如果它是一个保留字,你可以这样做

case class ColumnResponse (id: String, name: String, `type`: String)

推荐阅读