1. 程式人生 > >Springboot整合protobuf

Springboot整合protobuf

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分支