Я пишу REST api с помощью спрея и с некоторыми трудностями с json marshalling. Мой сервис возвращает cats.data.Xor [Failure, Success]. Как я могу вернуть этот тип данных из конечной точки REST? Как написать ответ marshaller для этого?спрей marshalling cats.data.Xor
1
A
ответ
0
Самое простое решение - просто позвонить toEither
по значению в вашем маршрутизаторе, что позволяет взять на себя спрей Either
marshaller.
Другим решением было бы обеспечить собственный маршаллер (я сделал это несколько раз сам):
import cats.data.Xor
import spray.httpx.marshalling.ToResponseMarshaller
implicit def xorMarshaller[A, B](implicit
ma: ToResponseMarshaller[A],
mb: ToResponseMarshaller[B]
): ToResponseMarshaller[Xor[A, B]] =
ToResponseMarshaller[Xor[A, B]] { (value, ctx) =>
value match {
case Xor.Left(a) => ma(a, ctx)
case Xor.Right(b) => mb(b, ctx)
}
}
Это позволяет избежать как стоимость выполнения (вероятно, ничтожна) и синтаксический стоимость (за вычетом пренебрежимо малой) преобразования.
Обратите внимание, что кошки является удаление Xor
в пользу стандартной библиотеки Either
в будущих версиях, хотя, так что просто идти с toEither
сейчас может быть наиболее практичным решением.
Смежные вопросы
- 1. спрей-json в Http(). BindAndHandle
- 2. Доступ запрос спрей от ответа спрей
- 3. Spray Json Marshalling Mutable Objects
- 4. Имитировать спрей
- 5. Недостаток стека Delphi + com marshalling = wrong marshalling
- 6. спрей-джсон и спрей-маршрутизация: как вызвать JsonFormat полностью писать
- 7. спрей-может NoClassDefFoundError
- 8. спрей с идеей
- 9. спрей маршрутизации 404 ответ
- 10. спрей: Переопределение функции Признакам
- 11. спрей: пользовательские OnSuccess директива
- 12. Как отключить спрей jsonFormat
- 13. спрей `detach` Директивы
- 14. Загрузка спрей: Unmarshalling MultiPartForm
- 15. спрей MultipartFormData Spec
- 16. Запуск спрей на IntelliJ
- 17. Произвести ошибку с scala и спрей
- 18. Расшифровка этого метода активатор-акка-спрей
- 19. Marshalling аргумент исключение
- 20. ошибка marshalling return;
- 21. JAXB Marshalling and Polymorphism
- 22. JAXB marshalling, ignore nillable
- 23. # marshalling Счетчик производительности
- 24. marshalling struct, содержащий строку
- 25. JAXB Fragmented Marshalling
- 26. Точное определение термина 'marshalling'
- 27. Spray Marshalling Custom Objects
- 28. C# Marshalling BOOL
- 29. WCF data marshalling
- 30. Marshalling тип данных вопрос