java - 在反序列化期间将 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' 是保留关键字。如何处理这种情况?
解决方案
回答第一个:
不可变对象可以使用以下copy
函数进行变异:
dataSet.copy(columns = newResp :: dataSet.columns)
对于更复杂的任务,您可以使用镜头,请参见此处的示例:在此处输入链接描述
回答第二个:
如果它是一个保留字,你可以这样做
case class ColumnResponse (id: String, name: String, `type`: String)
推荐阅读
- excel - 在 VBA-运行时错误“1004”中生成具有正态分布的随机数
- html - 如何在 CSS 的帮助下为响应式网页实现以下布局?
- angular - 如何将 formData、图像传递给我正在使用的 API 的 HTTP 发布请求?
- camunda - Camunda 在 StartEvent / 启动进程时填充数据
- javascript - 处理获取响应 - JS
- jenkins - AEM 6.3 - Jenkins 构建不尊重 Filter.xml 合并模式?
- jquery - 仅使用 Jquery 验证的字母
- javascript - 在 Angular 6 项目中包含 js 函数
- c++ - C++11:用另一个 constexpr char 数组初始化 constexpr char 数组
- ruby-on-rails - 通过 Rake 或 Active Job 自动为不同的受众批量发送电子邮件