Solon v3.0.6

solon-serialization-protostuff

</> markdown
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-serialization-protostuff</artifactId>
</dependency>

1、描述

序列化扩展插件,为 Solon Serialization 提供基于 protostuff (代码仓库)的框架适配。此插件,要求交互的数据为实体类!(实体类内部,可以有 Map 或 List 或 泛型)

这插件主要用作 Solon Rpc 的服务端序列化方案。(v3.0.4 后支持)

2、主要接口实现类

实现接口备注
ProtostuffBytesSerializerSerializerprotobuf 序列化器
ProtostuffRenderRender用于处理 protobuf 渲染输出
ProtostuffActionExecutorActionExecuteHandler用于执行 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);
    }
}

4、示例代码

https://gitee.com/opensolon/solon-examples/tree/main/7.Solon-Remoting-Rpc/demo7032-nami-coder-protostuff