Я разработчик Java и новичок в scala.
Я реализую некоторый API для отдыха, который использует спрей и акка. API должен предоставлять какой-то пользовательский CRUD. Я буду использовать только создать пользователя в этом вопросе ...
trait DefaultJsonFormats extends DefaultJsonProtocol with SprayJsonSupport with MetaMarshallers {}
class RegistrationService(registration: ActorRef)
(implicit executionContext: ExecutionContext)
extends Directives with DefaultJsonFormats {
implicit val timeout = Timeout(2.seconds)
implicit val userFormat = jsonFormat3(User)
implicit val registerFormat = jsonFormat1(Register)
implicit val registeredFormat = jsonFormat1(Registered)
val route =
path("register") {
post { handleWith { ru: Register => (registration ? ru).mapTo[Registered] } }
}
//------ Актер
object RegistrationActor {
case class User(id:String, name:String)
case class Register(user: User)
case class Registered(status: String)
case object NotRegistered
}
class RegistrationActor(implDef: String) extends Actor {
def receive: Receive = {
case Register(user)=>
val status=// create user real code with return status
sender ! new Registered(status)
} }
При таком подходе json-сериализация и дезиарелизация довольно раздражают. Для каждого объекта, который мне нужно иметь дело с API, я должен определить соответствующий формат.
implicit val userFormat = jsonFormat3(User)
implicit val registerFormat = jsonFormat1(Register)
implicit val registeredFormat = jsonFormat1(Registered)
Я хотел бы избежать такого определения и использовать какой-то общий конвертер json и возвращать объекты pojo, поэтому преобразование будет происходить под капотом
Вопрос в том, как я могу изменить этот код для использования по умолчанию конвертера Gson / Jackson / Spray по умолчанию и избежать определения неявного ... jsonFormats?