Springboot整合protobuf
阿新 • • 發佈:2018-11-03
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分支