Finch jsonBody преобразование пользовательских параметров - PullRequest
1 голос
/ 24 мая 2019

Мы используем jsonbody для преобразования полезной нагрузки json в теле в класс случая scala:

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

Теперь я хочу ограничить длину одного поля, скажем, до 200 символов. Конечно, я могу скопировать полученный DomainEvent со значением полей, усеченным до 200 символов, но это кажется немного неэффективным. Есть ли способ легко изменить поведение jsonBody, чтобы включить этот эффект?

1 Ответ

1 голос
/ 24 мая 2019

Это очень нестандартный вариант использования, и Finch его не поддерживает. Это обычай, по крайней мере, по трем причинам, о которых я могу думать:

  1. Вы не проверяете ввод; вместо этого вы принимаете любую длину, но затем изменяете ее до максимум 200 символов.
  2. Он применяется не для всего тела, а только для одного конкретного поля.
  3. Он определяется не размером в байтах (например, заголовок Content-Length), а длиной символов.

Но вы могли бы добиться этого на уровне декодирования, что все же лучше, чем усечение в модели предметной области (класс case). См. Документацию по нестандартным декодерам .

В какой-то момент вам нужно будет реализовать функцию String => Try[DomainEvent], и именно здесь вы можете подключить свою реализацию - после чтения поля JSON, которое необходимо усечь, сократите его до 200 символов и используйте его при заполнении DomainEvent корпус класса. Таким образом, сам класс case не должен ничего знать о усечении; это зависит от конечной точки, и это происходит в слое, который декодирует тело JSON в класс case.

...