Springboot整合protobuf

1.添加Maven依赖



    com.google.protobuf
    protobuf-java
    3.6.0


    com.googlecode.protobuf-java-format
    protobuf-java-format
    1.2




    org.apache.httpcomponents
    httpclient
    4.5.2


    org.apache.httpcomponents
    httpcore
    4.4

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

你可能感兴趣的:(javaweb)