Finch jsonBody自定义参数转换

时间:2019-05-24 09:08:03

标签: scala finagle

我们正在使用jsonbody将主体中的json有效负载转换为scala case类:

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

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

1 个答案:

答案 0 :(得分:1)

这是一个非常自定义的用例,Finch不支持它。出于至少三个我能想到的原因,这是一种习惯:

  1. 您不是验证输入;相反,您可以接受任何长度,但随后将其修改为最大200个字符。
  2. 它不是在整个身体上都强制执行,而仅在一个特定领域上执行。
  3. 它不是由字节(如Content-Length标头)的大小定义的,而是由字符的长度定义的。

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

有时,您将需要实现一个函数String => Try[DomainEvent],在这里您可以插入实现-在读取需要截断的JSON字段后,将其缩短为200个字符,并在填充时使用DomainEvent案例类。这样,case类本身就不需要了解有关截断的任何信息。它是特定于端点的,并且发生在将JSON主体解码为case类的层中。