solon-serialization-protostuff
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-serialization-protostuff</artifactId>
</dependency>
1、描述
序列化扩展插件,为 Solon Serialization 提供基于 protostuff (代码仓库)的框架适配。此插件,要求交互的数据为实体类!(实体类内部,可以有 Map 或 List 或 泛型)
这插件主要用作 Solon Rpc 的服务端序列化方案。(v3.0.4 后支持)
2、主要接口实现类
类 | 实现接口 | 备注 |
---|---|---|
ProtostuffBytesSerializer | Serializer | protobuf 序列化器 |
ProtostuffRender | Render | 用于处理 protobuf 渲染输出 |
ProtostuffActionExecutor | ActionExecuteHandler | 用于执行 protobuf 内容的请求 |
何时会被时用?当 Content-Type 为 application/protobuf 时会执行。
3、应用示例
- 公用包
@Setter
@Getter
public class MessageDo {
@Tag(1) // Protostuff 注解
private long id;
@Tag(2)
private String title;
}
- 服务端(只支持 @Body 数据接收,只支持实体类)
@Mapping("/rpc/demo")
@Remoting
public class HelloServiceImpl {
@Override
public MessageDo hello(@Body MessageDo message) { //还可接收路径变量,与请求上下文
return message;
}
}
- 客户端应用 for HttpUtils(只支持 body 数据提交,只支持实体类)
#添加插件
org.noear:solon-net-httputils
//应用代码
@Component
public class DemoCom {
public MessageDo hello() {
MessageDo message = new MessageDo();
message.setId(3);
//指明请求数据为 PROTOBUF,要求数据为 PROTOBUF
return HttpUtils.http("http://localhost:8080/rpc/demo/hello")
.serializer(ProtostuffBytesSerializer.getInstance())
.header(ContentTypes.HEADER_CONTENT_TYPE, ContentTypes.PROTOBUF_VALUE)
.header(ContentTypes.HEADER_ACCEPT, ContentTypes.PROTOBUF_VALUE)
.bodyOfBean(message)
.postAs(MessageDo.class);
}
}
- 客户端应用 for Nami(只支持 body 数据提交,只支持实体类)
#添加插件
org.noear:nami-coder-protostuff
org.noear:nami-channel-http
//应用代码
public interface HelloService {
MessageDo hello(@NamiBody MessageDo message);
}
@Component
public class DemoCom {
@NamiClient(url = "http://localhost:8080/rpc/demo", headers = {ContentTypes.PROTOBUF, ContentTypes.PROTOBUF_ACCEPT})
HelloService helloService;
public MessageDo hello() {
MessageDo message = new MessageDo();
message.setId(3);
rerturn helloService.hello(message);
}
}