【发布时间】:2019-02-09 11:34:03
【问题描述】:
我在akka http 中创建了两个rest 端点,它们将字符串作为输入,使用Json4s 对其进行解析,然后对其进行处理。我的案例类就像 -
final case class A(id: String, name: String, address: String)
第一个端点仅接收 id 而另一个接收所有三个字段,我想对两者使用相同的案例类 A。所以我使用了名称和地址字段的默认值,例如 -
final case class A(id: Stirng, name: String = "", address: String = "")
这对我很有用。但是现在,如果我不在第二个端点发送地址或名称(或两者)字段,它不会抛出异常说明未找到名称(或地址)。
所以,我的问题是我是否可以创建一个端点,其中 id 是强制性的,而其他字段无关紧要,另一个端点是每个字段都是强制性的,使用相同的案例类? 将字符串解析为案例类的代码是 -
parse(jsonStr).extract[A]
我希望你明白我的意思。
有什么建议吗?
【问题讨论】:
-
你不能用两个不同的请求创建一个端点。您将不得不进行验证。使用 Option[String] 作为名称和地址。当您发送姓名和地址时,请执行 name.get 和 address.get
-
使用 play-json 你可以使用
Json.using[Json.WithDefaultValues]- 也许json4s有类似的概念 -
使用 jsoniter-scala 代替 - 它具有对案例类字段的内置处理,默认值是可选的,并且还与 akka-http 集成:github.com/hseeberger/akka-http-json/pull/205
标签: scala case-class json4s