我对协议缓冲区很陌生。我有一些java pojo类,它有一个类型为Date的字段,仅包括年份、月份和日期。
对于时间戳类型,我们可以import "google/protobuf/timestamp.proto";
。
但是对于日期类型,我们不能这样做,因为date.proto在https://github.com/googleapis/googleapis/blob/master/google/type/date.proto
中。
那么如何导入这个date.proto
呢?
发布于 2022-05-03 03:31:17
对于时间戳类型,我们可以导入“google/
/timestamp.proto”;
因为timestamp.proto
是Protobuf中包含的一些内置消息类型。
,但是对于日期类型,我们不能这样做,因为date.proto在https://github.com/googleapis/googleapis/blob/master/google/type/date.proto中。
首先,您应该克隆整个项目,或者只是下载所需的任何file).
date.proto
将date.proto
放入您的项目中,您可以创建一个导入目录,例如:用protoc
生成代码;您必须使用--proto_path
命令行标志(又名-I
)来告诉protoc
在哪里查找< code >D20文件。如果不提供路径,默认情况下它将只搜索当前目录:protoc -I. --cpp_out=. usersvr.proto
这是我的演示项目的结构:
╰─$ tree
.
├── google
│ └── type
│ └── date.proto
├── usersvr.pb.cc
├── usersvr.pb.h
└── usersvr.proto
usersvr.proto:
syntax = "proto3";
package srv.user;
import "google/protobuf/timestamp.proto";
import "google/type/date.proto";
option cc_generic_services = true;
message BatchGetUserInfosRequest {
uint64 my_uid = 1;
repeated uint64 peer_uids = 2;
map<string, string> infos = 3;
google.protobuf.Timestamp timestamp = 4;
google.type.Date date = 5;
}
date.proto
是从https://github.com/googleapis/googleapis/blob/master/google/type/date.proto下载的
发布于 2022-05-03 04:52:02
假设您的Gradle (或Maven)设置正常工作并生成代码,则必须将.proto文件复制到您的protobuf源文件中(例如:project/src/main/proto
)。您只需要复制它(如果您只关心与Java一起使用它):
syntax = "proto3";
package google.type;
option java_multiple_files = true;
option java_outer_classname = "DateProto";
option java_package = "com.google.type";
message Date {
int32 year = 1;
int32 month = 2;
int32 day = 3;
}
然后,您将使用Gradle任务(或maven)生成Java代码,并通过这样的导入来访问Date
:
import com.google.type.Date;
在此之后,建议将com.google.type.Date
的属性映射到用作日期的任何类型,最好不要直接存储com.google.type.Date
生成的类型。这将使您对类型有更多的控制,而如果存储生成的类型,则不可能有与Java对象相同的自由度。
注意:如果您愿意直接使用Timestamp
**,,有一些方法可以将它们转换为** Date
https://stackoverflow.com/questions/72089009
复制相似问题