Я работаю над простым примером 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 устраняет все проблемы, но это выглядит странно.