You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Java POJO类转换为蛇形命名(SnakeCase)的Scala Case Class

将Java POJO转换为Scala Case Class(针对你的IncidentResponse场景)

首先,我先把你给出的Java POJO代码整理清楚(看起来OrderDetailResponse里还有一个自引用的列表字段,我先假设它叫subOrderDetails):

@JsonIgnoreProperties(ignoreUnknown = true)
public class IncidentResponse {
    private String issueType;
    private List<OrderDetailResponse> orderDetails;
    
    // GETTER和SETTER方法
}

@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderDetailResponse {
    private String orderId;
    private String orderItemId;
    private List<OrderDetailResponse> subOrderDetails;
    
    // GETTER和SETTER方法
}

接下来是转换后的Scala Case Class实现,完全适配Jackson的序列化/反序列化需求,同时符合Scala的最佳实践:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties

// 主响应类,对应原IncidentResponse
@JsonIgnoreProperties(ignoreUnknown = true)
case class IncidentResponse(
  issueType: String,
  orderDetails: Seq[OrderDetailResponse]
)

// 订单详情类,对应原OrderDetailResponse,支持自引用列表
@JsonIgnoreProperties(ignoreUnknown = true)
case class OrderDetailResponse(
  orderId: String,
  orderItemId: String,
  subOrderDetails: Seq[OrderDetailResponse]
)

几个关键说明:

  • Case Class天生自带equals、hashCode、toString方法,还自动生成了构造器的apply方法,完全不需要手动写getter/setter——因为构造参数默认是val(不可变),Jackson可以直接访问这些字段完成序列化/反序列化。
  • 把Java的List换成了Scala的Seq,这是Scala里更通用的集合类型,Jackson的Scala模块能完美处理它。
  • 如果你的API返回的字段可能为null(或者JSON里可能缺失某些字段),推荐用Option来包装字段,这样能避免空指针问题,更符合Scala的风格:
@JsonIgnoreProperties(ignoreUnknown = true)
case class IncidentResponse(
  issueType: Option[String] = None,
  orderDetails: Option[Seq[OrderDetailResponse]] = None
)

@JsonIgnoreProperties(ignoreUnknown = true)
case class OrderDetailResponse(
  orderId: Option[String] = None,
  orderItemId: Option[String] = None,
  subOrderDetails: Option[Seq[OrderDetailResponse]] = None
)

这里给每个Option字段加了= None的默认值,这样当JSON里没有对应字段时,会自动用None填充,而不是抛出异常。

必备依赖提醒

要让Jackson正确处理Scala的Case Class、Seq、Option这些类型,你需要在项目中引入jackson-module-scala依赖。如果是用sbt构建的话,添加这行到你的build.sbt:

libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.15.2"

版本号可以根据你项目中Jackson的主版本来调整,保持一致即可。

内容的提问来源于stack exchange,提问作者Srinivas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:22:35