Finch jsonBody 自定义参数转换

Finch jsonBody custom parameter conversion

我们正在使用 jsonbody 将 body 中的 json 有效负载转换为 scala 案例 class:

val domainObject: Endpoint[String] = post("domain" :: jsonBody[DomainEvent] :: some_more :: 

现在我想将一个字段的长度限制为 200 个字符。当然,我可以复制检索到的 DomainEvent,并将字段值截断为 200 个字符,但这似乎有点低效。有没有一种方法可以轻松地改变 json身体的行为以包含这种效果?

这是一个非常自定义的用例,Finch 不支持它。我至少可以想到三个原因:

  1. 您没有验证输入;相反,您接受任何长度,但随后将其修改为最多 200 个字符。
  2. 不强制全身,只针对某一领域。
  3. 它不是按字节大小定义的(如Content-Length header),而是按字符长度定义。

但是您可以在解码级别实现这一点,这仍然比在域模型中截断要好(案例 class)。请参阅 custom decoders 上的文档。

有时您需要实现一个函数 String => Try[DomainEvent],您可以在此处插入您的实现 - 在阅读需要截断的 JSON 字段后,将其缩短为 200字符并在填充 DomainEvent 案例 class 时使用它。这样 case class 本身不需要知道任何关于截断的事情;它是 endpoint-specific,它发生在将 JSON 主体解码为案例 class.

的层中