加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何直接在Play中返回协议缓冲区! 2.0框架?

发布时间:2020-12-16 18:52:51 所属栏目:安全 来源:网络整理
导读:Play允许您直接在控制器中返回许多不同类型,例如JsValue或 XML以及纯文本.我想扩展它以接受协议缓冲区,所以我可以写: def page = Action { val protobuf = //... Ok(protobuf)} 解决方法 Java中的协议缓冲区都从单个com.google.protobuf.Message类继承. 在
Play允许您直接在控制器中返回许多不同类型,例如JsValue或 XML以及纯文本.我想扩展它以接受协议缓冲区,所以我可以写:

def page = Action {
    val protobuf = //...
    Ok(protobuf)
}

解决方法

Java中的协议缓冲区都从单个com.google.protobuf.Message类继承.

在应用程序控制器的范围内添加以下隐式转换:

implicit def contentTypeOf_Protobuf: ContentTypeOf[Message] = {
  ContentTypeOf[Message](Some("application/x-protobuf"))
}
implicit def writeableOf_Protobuf: Writeable[Message] = {
  Writeable[Message](message => message.toByteArray())
}

这些将允许Play直接在由Ok(protobuf)等状态给出的响应中序列化缓冲区

更新:

我已经发布了一个反向情况的工作示例,其中可以解析传入的请求并自动提取protobuf.

> https://gist.github.com/3455432

在这个例子中,解析器采用动作的形式,你也可以编写一个身体解析器:

object Put extends Controller {
  def index = DecodeProtobuf(classOf[MyProtobuf]) { stack :MyProtobuf =>
    Action {
      // do something with stack
    }
  }
}

发送请求的客户端应将缓冲区序列化为字节数组,并将其直接传递给请求主体.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读