Springboot整合protobuf

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013219624/article/details/83152806

1.添加Maven依赖

<!-- protobuf依赖-->
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.6.0</version>
</dependency>
<dependency>
    <groupId>com.googlecode.protobuf-java-format</groupId>
    <artifactId>protobuf-java-format</artifactId>
    <version>1.2</version>
</dependency>

<!-- 网络请求依赖 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4</version>
</dependency>

2.CommonConfig代码

@Configuration
public class CommonConfig {

    /**
     * protobuf 序列化
     */
    @Bean
    ProtobufHttpMessageConverter protobufHttpMessageConverter() {
        return new ProtobufHttpMessageConverter();
    }

    /**
     * protobuf 反序列化
     */
    @Bean
    RestTemplate restTemplate(ProtobufHttpMessageConverter protobufHttpMessageConverter) {
        return new RestTemplate(Collections.singletonList(protobufHttpMessageConverter));
    }
}

3.protobuf定义,并生成java文件

syntax = "proto3";

option java_package = "com.boomsecret.protobuf";
option java_outer_classname = "MessageUserLogin";

message MessageUserLoginRequest {
    string username = 1;
    string password = 2;
}

message MessageUserLoginResponse {
    string access_token = 1;
    string username = 2;
}

protoc.exe --java_out=.\..\..\java .\user_login.proto  (生成Java文件,protoc.exe自己下载)

4.controller接口

@Controller
public class TestController {

    @RequestMapping(value = "/test", produces = "application/x-protobuf")
    @ResponseBody
    public MessageUserLoginResponse getPersonProto(@RequestBody MessageUserLoginRequest request) {
        MessageUserLoginResponse.Builder builder = MessageUserLoginResponse.newBuilder();
        builder.setAccessToken(UUID.randomUUID().toString());
        builder.setUsername(request.getUsername());
        return builder.build();
    }
}

5.测试

   @RunWith(SpringRunner.class)
   @SpringBootTest
   public class DemoApplicationTests {
  
      @Test
      public void test() {
          try {
              URI uri = new URI("http", null, "127.0.0.1", 8080, "/demo/test", "", null);
              HttpPost request = new HttpPost(uri);
              MessageUserLoginRequest.Builder builder = MessageUserLoginRequest.newBuilder();
              builder.setUsername("tom");
              builder.setPassword("123456");
              HttpResponse response = HttpUtils.doPost(request, builder.build());
              MessageUserLoginResponse messageUserLoginResponse = MessageUserLoginResponse.parseFrom(response.getEntity().getContent());
              System.out.println(messageUserLoginResponse.getAccessToken());
          } catch (Exception e) {
  
          }
      }
  }

源码 https://gitee.com/jsjack_wang/springboot-demo dev-protobuf分支

猜你喜欢

转载自blog.csdn.net/u013219624/article/details/83152806
今日推荐