如何取消限制Spray jsonFormat [英] How to unlimit spray jsonFormat

查看:169
本文介绍了如何取消限制Spray jsonFormat的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在实现一些使用spray和akka的rest API.该API应该公开某种用户CRUD.在这个问题中,我将仅使用创建用户...

I'm implementing some rest API that use spray and akka The API should expose some kind of user CRUD. I'll use only create user in this question...

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] } }
}

现在让我们假设User类有30个字段 但是没有jsonFormat30(...) 我该如何对任何case类对象使用此类隐式?

Now Lets suppose that User class has 30 fields but there is no jsonFormat30(...) How can I use such implicits for any case class object?

推荐答案

如果要引用ProductFormatsInstances特征中的方法,则存在jsonFormat版本,最多22个参数.如果您的案例类具有22个以上的参数,则可以看到两个立即选择.假设你有

If you are referring to the methods in the ProductFormatsInstances trait, there are versions of jsonFormat up to 22 parameters. If you have a case class with more than 22 parameters, I see two immediate options. Suppose you have

case class Client(..., address: Address, telephone: Telephone, email: Email, ...)

  • 选项1:通过将Client类分解为带有较少参数的更细粒度的类来减少参数的数量.例如,您可以重构为以下内容.

    • Options 1: reduce the number of parameters by breaking down the Client class into finer-grained classes taking fewer parameters.. For example, you can refactor to the following.

      case class ClientContact(address: Address, telephone: Telephone, email: Email)
      case class Client(..., contact: ClientContact, ...)
      

    • 选项2:通过实现RootJsonFormat编写自定义序列化程序.有关示例,请参见此处.

    • Options 2: write a custom serialiser by implementing RootJsonFormat. See here for an example.

      这篇关于如何取消限制Spray jsonFormat的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆