【发布时间】:2017-05-22 12:08:34
【问题描述】:
我有一个protocol buffer 文件:
syntax = "proto3";
package v1api;
option java_multiple_files = true;
option java_package = "myApp.v1";
option java_outer_classname = "V1";
service API {
rpc Login(LoginRequest) returns (LoginResponse)
}
message LoginRequest {
int pin = 1
}
message LoginResponse {
string token = 1
}
我的服务器是用 Go(一种可以返回多个值的语言)编写的,我的客户端是一个 Android 应用程序。
当我使用这个 protoBuf 为服务器生成 Go 代码时,它是这样的:
...
func (c *aPIClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc.CallOption) (*LoginResponse, error) {
out := new(LoginResponse)
err := grpc.Invoke(ctx, "/v1api.API/Login", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
...
注意有两个返回值,(*LoginResponse, error)。
现在,当我使用这个 protoBuf 为我的 Android 端生成 Java 代码时,我得到了类似的东西:
public myApp.v1.LoginResponse login(myApp.v1.LoginRequest request) {
return blockingUnaryCall(getChannel(), METHOD_LOGIN, getCallOptions(), request);
}
请注意,这里只有 一个 像 Java 允许的返回值,myApp.v1.LoginResponse。
我的问题是,如果服务器返回错误(例如:return nil, err),我将如何在我的 Android 端获得第二个返回值。
【问题讨论】:
-
例外?
标签: java go protocol-buffers grpc grpc-java