如何无限喷jsonFormat
How to unlimit spray jsonFormat
我正在实施一些使用 spray 和 akka 的休息 API API 应该公开某种用户 CRUD。我只会在这个问题中使用创建用户...
case class User(id:String, name:String)
case class Register(user:User, registrationId:String)
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] } }
}
现在假设用户 class 有 30 个字段
但是没有 jsonFormat30(...)
我怎样才能对任何情况 class 对象使用这样的隐式?
如果您指的是 ProductFormatsInstances
trait 中的方法,jsonFormat
有最多 22 个参数的版本。如果您的 case class 参数超过 22 个,我会立即看到两个选项。假设你有
case class Client(..., address: Address, telephone: Telephone, email: Email, ...)
选项 1:通过将 Client
class 分解为更细粒度的 class 参数来减少参数数量。例如,您可以重构为以下内容。
case class ClientContact(address: Address, telephone: Telephone, email: Email)
case class Client(..., contact: ClientContact, ...)
选项 2:通过实现 RootJsonFormat
编写自定义序列化程序。有关示例,请参阅 here。
我正在实施一些使用 spray 和 akka 的休息 API API 应该公开某种用户 CRUD。我只会在这个问题中使用创建用户...
case class User(id:String, name:String)
case class Register(user:User, registrationId:String)
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] } }
}
现在假设用户 class 有 30 个字段 但是没有 jsonFormat30(...) 我怎样才能对任何情况 class 对象使用这样的隐式?
如果您指的是 ProductFormatsInstances
trait 中的方法,jsonFormat
有最多 22 个参数的版本。如果您的 case class 参数超过 22 个,我会立即看到两个选项。假设你有
case class Client(..., address: Address, telephone: Telephone, email: Email, ...)
选项 1:通过将
Client
class 分解为更细粒度的 class 参数来减少参数数量。例如,您可以重构为以下内容。case class ClientContact(address: Address, telephone: Telephone, email: Email) case class Client(..., contact: ClientContact, ...)
选项 2:通过实现
RootJsonFormat
编写自定义序列化程序。有关示例,请参阅 here。