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 } } } 发送请求的客户端应将缓冲区序列化为字节数组,并将其直接传递给请求主体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |