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 不支持它。我至少可以想到三个原因:
- 您没有验证输入;相反,您接受任何长度,但随后将其修改为最多 200 个字符。
- 不强制全身,只针对某一领域。
- 它不是按字节大小定义的(如
Content-Length
header),而是按字符长度定义。
但是您可以在解码级别实现这一点,这仍然比在域模型中截断要好(案例 class)。请参阅 custom decoders 上的文档。
有时您需要实现一个函数 String => Try[DomainEvent]
,您可以在此处插入您的实现 - 在阅读需要截断的 JSON 字段后,将其缩短为 200字符并在填充 DomainEvent
案例 class 时使用它。这样 case class 本身不需要知道任何关于截断的事情;它是 endpoint-specific,它发生在将 JSON 主体解码为案例 class.
的层中
我们正在使用 jsonbody 将 body 中的 json 有效负载转换为 scala 案例 class:
val domainObject: Endpoint[String] = post("domain" :: jsonBody[DomainEvent] :: some_more ::
现在我想将一个字段的长度限制为 200 个字符。当然,我可以复制检索到的 DomainEvent,并将字段值截断为 200 个字符,但这似乎有点低效。有没有一种方法可以轻松地改变 json身体的行为以包含这种效果?
这是一个非常自定义的用例,Finch 不支持它。我至少可以想到三个原因:
- 您没有验证输入;相反,您接受任何长度,但随后将其修改为最多 200 个字符。
- 不强制全身,只针对某一领域。
- 它不是按字节大小定义的(如
Content-Length
header),而是按字符长度定义。
但是您可以在解码级别实现这一点,这仍然比在域模型中截断要好(案例 class)。请参阅 custom decoders 上的文档。
有时您需要实现一个函数 String => Try[DomainEvent]
,您可以在此处插入您的实现 - 在阅读需要截断的 JSON 字段后,将其缩短为 200字符并在填充 DomainEvent
案例 class 时使用它。这样 case class 本身不需要知道任何关于截断的事情;它是 endpoint-specific,它发生在将 JSON 主体解码为案例 class.