找人做软件网站,微信营销管理系统,景点介绍网站开发设计,做网站的素材不论是Thrift RPC还是SpringWeb服务#xff0c;服务方法的输入和输出参数都要通过网络在Server/Client之间传输。实现数据对象传输#xff0c;发送端需要对数据对象进行序列化(JSON或二进制数据流)#xff0c;接收端需要对收到的数据反序列化还原为原始的数据对象。 从3.32.… 不论是Thrift RPC还是SpringWeb服务服务方法的输入和输出参数都要通过网络在Server/Client之间传输。实现数据对象传输发送端需要对数据对象进行序列化(JSON或二进制数据流)接收端需要对收到的数据反序列化还原为原始的数据对象。 从3.32.0版本开始sql2java增加了静态字段过滤功能是指在生成sql2java的数据库表记录对象类时允许指定字段的可见度(ColumnVisibility)。 sql2java的完整使用示例参见码云仓库: sql2java-example: sql2java调用示例 (gitee.com) 可见度是指字段对数据接收端是否可见只要控制数据库表对象在序列化/反序列化时忽略不可见字段数据接收端最终收到数据库对象中就不会包含该字段。
具体实现就是sql2java-generator会根据字段的可见度要求对于不可见字段在生成对应字段代码时增加Jackson,Fastjson,Thrift注解(Annotation)指定在表对象序列化/反序列化时忽略该字段。
字段可见度定义
sql2java中字段可见度定义对应枚举类型gu.sql2java.ColumnVisibility
枚举变量JSON是否可见Thrift是否可见说明DEFAULTtruetrue默认:全可见LOCALfalsefalse仅本地可见与远端(Spring WEB,Thrift RPC)交互时不可见THRIFTfalsetrueThrift RPC 传输时可见,Thrft RPC 客户端与服务端交互时可见JSONtruefalseJSON序列化时可见Spring WEB 客户端与服务端 交互时可见(Spring WEB是基于jackson实现序列化和反序列化的)使用fastjson对数据库对象进行序列化和反序列化时同样有效。
定义可见度
字段注释标记 SCOPEEPOSC 用于定义字段可见度具体格式为
SCOPE(LOCAL|JSON|THRIFT)EPOSC标记中的LOCAL,JSON,THRIFT对应着上述的三种可见度
如下示例下面的表定义中private_time字段定义了SCOPEEPOSC注释标记指定了该字段仅本地可见。也就是说只有服务端本身可以读写该字段。
CREATE TABLE IF NOT EXISTS dc_device (id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT XNAME:设备idX,name varchar(32) DEFAULT NULL COMMENT XNAME:设备名称X,用户指定,physical_address varchar(32) NOT NULL UNIQUE COMMENT 设备XNAME:物理地址X,MAC地址,IMEI或其他设备识别码,private_time bigint DEFAULT 0 COMMENT SCOPELOCALEPOSC设备令牌创建的时间戳(毫秒),os_arch varchar(64) DEFAULT NULL COMMENT XNAME:操作系统平台X,操作系统名称及版本及硬件架构名称,例如:Windows-x86_64,Linux-x86_64,Android-arm...
) COMMENT XNAME:前端设备记录X,前端设备基本信息 DEFAULT CHARSETutf8;
sql2java-generator生成的DeviceBean对象中dc_device.private_time字段的对应成员privateTime定义代码如下 /** comments:设备令牌创建的时间戳(毫秒) */ApiModelProperty(value 设备令牌创建的时间戳(毫秒) ,dataTypeLong)CodegenDefaultvalue(0)CodegenInvalidValue(-1)ExcelColumn(sort9)com.alibaba.fastjson.annotation.JSONField(serialize false,deserialize false)com.fasterxml.jackson.annotation.JsonIgnoreprivate Long privateTime;/*** Getter method for {link #privateTime}.br* Meta Data Information (in progress):* ul* lifull name: dc_device.private_time/li* licomments: 设备令牌创建的时间戳(毫秒)/li* lidefault value: 0/li* licolumn size: 19/li* liJDBC type returned by the driver: Types.BIGINT/li* /ul** return the value of privateTime*/JsonIgnorepublic Long getPrivateTime(){return privateTime;}可以看到privateTime成员定义的Jackson注解JsonIgnore和fastjson注解JSONField指定该字段在JSON序列化和反序列化时忽略应该字段。同时privateTime的getter方法上也没有thrift字段注解ThriftField代表应该字段没有被定义为Thrift Struct成员字段。
swift2thrift-maven-plugin插件生成的IDL中就不会有privateTime字段
struct DeviceBean {1: required bool _new;2: required i32 modified;3: required i32 initialized;4: optional i32 id;5: optional string name;6: optional string physicalAddress;7: optional string osArch;
}完整说明
参见 sql2java: 轻量级数据库(SQL)访问代码(java)生成器 (gitee.com) README.md的《静态字段过滤》章节