Проблемы с использованием класса case для нескольких полей в теле POST Finatra - PullRequest
0 голосов
/ 24 декабря 2018

Я работаю над простым примером API Finatra, но у меня возникают проблемы при использовании класса case для запроса POST при использовании более одного поля в теле запроса.

Вот пример моего класса case иконтроллер:

class SaleResource extends Controller {
  post("/sales") { sale: Sale =>
    s"$sale"
  }
}

case class Sale(
                 user: Option[String],
                 streetAddress: Option[String]
               )

Я отправляю почтовый запрос по этому маршруту со следующим телом запроса JSON:

{
"user": "Foo Barrington",
"streetAddress":"Baz Street"
}

Ответ: Sale(Some(Foo Barrington),None)

Ответ показываетчто пользователь правильно десериализован, но по какой-то причине я не могу заполнить поле streetAddress.

Кроме того, я заметил, что, установив любое из этих полей на String вместо Option[String], я получаю только 500 неудачных ответов.

То, что я пробовал:

  • операторы case, соответствующие Some(streetAddress) строковому значению этого поля или «none found», когда оно равно None.В этих случаях все еще говорится, что streetAddress - это None, когда это не так.
  • Выполнение запроса как с curl, так и с почтальоном.

Я всегда могу получить доступ кпользовательское поле из объекта Sales, но никогда streetAddress (или любое другое поле из тела запроса, если я добавлю тестовые элементы в класс case.

Я ожидаю, что оба поля будутраспознаются, поскольку они оба указаны в запросе. Я новичок в Scala / Finatra в целом, поэтому возможно, что я просто неправильно использую библиотеку Finatra или классы Case.

РЕДАКТИРОВАТЬ: похоже, что изменениеимена полей не должны быть смешаны / Camelcase устраняет все проблемы, но это выглядит странно.

...