电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot使用protobuf格式的接口方式

瀏覽:2日期:2023-02-21 10:59:55
SpringBoot使用protobuf格式的接口建立SpringBoot項目,pom.xml內容如下:

<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example.protobuf</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties><java.version>1.8</java.version> </properties> <dependencies><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions><exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId></exclusion> </exclusions></dependency><dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.11.0</version></dependency><dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.11.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><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version></dependency><dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.0</version></dependency> </dependencies> <build><plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin></plugins> </build></project>編寫.proto文件,內容如下:

user_login.proto:

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;}生成java代碼:

protoc.exe --java_out=./ user_login.proto將生成的代碼移動到你的項目中合適位置:

SpringBoot使用protobuf格式的接口方式

編寫protobuf格式的Controller接口:

package com.example.protobuf.demo.controller;import com.boomsecret.protobuf.MessageUserLogin;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpPost;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import util.HttpUtils;import java.net.URI;import java.util.UUID;@Controllerpublic class TestController { @RequestMapping(value = '/demo/test', produces = 'application/x-protobuf') @ResponseBody public MessageUserLogin.MessageUserLoginResponse getPersonProto(@RequestBody MessageUserLogin.MessageUserLoginRequest request) {MessageUserLogin.MessageUserLoginResponse.Builder builder = MessageUserLogin.MessageUserLoginResponse.newBuilder();builder.setAccessToken(UUID.randomUUID().toString()+'_res');builder.setUsername(request.getUsername()+'_res');return builder.build(); }}編寫測試類,通過HttpClient工具調用接口:

package com.example.protobuf.demo;import com.boomsecret.protobuf.MessageUserLogin;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpPost;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import util.HttpUtils;import java.net.URI;@SpringBootTestclass DemoApplicationTests { @Test void contextLoads() { } @Test public void test() {try { URI uri = new URI('http', null, '127.0.0.1', 8080, '/demo/test', '', null); HttpPost request = new HttpPost(uri); MessageUserLogin.MessageUserLoginRequest.Builder builder = MessageUserLogin.MessageUserLoginRequest.newBuilder(); builder.setUsername('tom'); builder.setPassword('123456'); HttpResponse response = HttpUtils.doPost(request, builder.build()); MessageUserLogin.MessageUserLoginResponse messageUserLoginResponse = MessageUserLogin.MessageUserLoginResponse.parseFrom(response.getEntity().getContent()); System.err.println(messageUserLoginResponse.getAccessToken());} catch (Exception e) {} }}HttpUtils內容如下:

package util;import com.google.protobuf.GeneratedMessageV3;import com.googlecode.protobuf.format.JsonFormat;import org.apache.http.Header;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.InputStreamEntity;import org.apache.http.impl.client.HttpClients;import java.io.ByteArrayInputStream;import java.io.IOException;/** * @author wangjinliang on 2018/10/18. */public class HttpUtils { public static HttpResponse doPost(HttpPost post, GeneratedMessageV3 message) throws IOException {HttpClient httpclient = HttpClients.createDefault();String requestUrl = post.getURI().toString();ByteArrayInputStream inputStream = new ByteArrayInputStream(message.toByteArray());InputStreamEntity inputStreamEntity = new InputStreamEntity(inputStream);post.setEntity(inputStreamEntity);post.addHeader('Content-Type', 'application/x-protobuf');for (Header header : post.getAllHeaders()) { System.out.println(header.getName() + ':' + header.getValue());}StringBuilder sb = new StringBuilder();sb.append('curl -XPOST ');for (Header header : post.getAllHeaders()) { sb.append(' -H '').append(header.getName()).append(':').append(header.getValue()).append(''');}String jsonBody = JsonFormat.printToString(message);jsonBody = jsonBody.replace(''', ''');sb.append(' -d '').append(jsonBody).append(''');sb.append(' ').append(requestUrl);System.out.println(sb.toString());return httpclient.execute(post); }}

以debug方式運行SpringBoot項目,并在controller加斷點,然后運行測試代碼:

SpringBoot使用protobuf格式的接口方式

可以看到請求過來的數據是正確的,放行后可以看到響應數據也是正確的:

SpringBoot使用protobuf格式的接口方式

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 天命文免费算命堂_自助算命_自由算命系统_长文周易 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 断桥铝破碎机_铝合金破碎机_废铁金属破碎机-河南鑫世昌机械制造有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 上海公司注册-代理记账-招投标审计-上海昆仑扇财税咨询有限公司 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 雪花制冰机(实验室雪花制冰机)百科 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 电力测功机,电涡流测功机,磁粉制动器,南通远辰曳引机测试台 | 氧化锆陶瓷_氧化锆陶瓷加工_氧化锆陶瓷生产厂家-康柏工业陶瓷有限公司 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 365文案网_全网创意文案句子素材站| 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 合肥网带炉_安徽箱式炉_钟罩炉-合肥品炙装备科技有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 刘秘书_你身边专业的工作范文写作小秘书| 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 高压直流电源_特种变压器_变压器铁芯-希恩变压器定制厂家 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 |