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