当前位置: 首页 > news >正文

哈尔滨市建工建设有限公司seo

哈尔滨市建工建设有限公司,seo,大黔门官方网站建设,图文网站模板本文介绍在http协议中&#xff0c;使用protobuf格式进行二进制数据通信。双方需设置http的header中ContentType为application/x-protobuf。 1、springboot下实现protobuf&#xff1a; 1&#xff09;pom.xml <dependency><groupId>org.springframework.boot</g…

本文介绍在http协议中,使用protobuf格式进行二进制数据通信。双方需设置http的header中ContentType为application/x-protobuf。

1、springboot下实现protobuf:

1)pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- protobuf -->
<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>

2)user_login.proto

syntax = "proto3";
// 转成java后所在包
option java_package = "com.tencent.rating.audi_model_api.pb";
// 转成java后的类名
option java_outer_classname = "MessageUserLogin";
// 转java后生成一个java文件
option java_multiple_files = false;message MessageUserLoginRequest {string username = 1;string password = 2;
}
message MessageUserLoginResponse {string access_token = 1;string username = 2;
}

编译:

protoc --proto_path=/data/ --java_out=./ /data/user_login.proto

3)创建springboot工程,编写config:

@Configuration
public class WebConfig {@BeanProtobufHttpMessageConverter protobufHttpMessageConverter() {return new ProtobufHttpMessageConverter();}/*** protobuf 反序列化 可以不用配置*/
//    @Bean
//    RestTemplate restTemplate(ProtobufHttpMessageConverter protobufHttpMessageConverter) {
//        return new RestTemplate(Collections.singletonList(protobufHttpMessageConverter));
//    }
}

4)编写contorller:

import java.util.UUID;
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 com.tencent.rating.audi_model_api.pb.MessageUserLogin;@Controller
public class PbTestController {	@RequestMapping(value = "/pbtest", produces = "application/x-protobuf")@ResponseBodypublic MessageUserLogin.MessageUserLoginResponse getPersonProto(@RequestBody MessageUserLogin.MessageUserLoginRequest request) {System.out.println("request:" + request.toString());MessageUserLogin.MessageUserLoginResponse.Builder builder = MessageUserLogin.MessageUserLoginResponse.newBuilder();builder.setAccessToken(UUID.randomUUID().toString()+"_res");builder.setUsername(request.getUsername()+"_res");return builder.build();}
}

然后启动sprinboot工程。监听8080端口

5)编写客户端请求:

public class PbTest {public static void main(String...strings) {try {String uri = "http://127.0.0.1:8080/clue/pbtest";MessageUserLogin.MessageUserLoginRequest.Builder builder = MessageUserLogin.MessageUserLoginRequest.newBuilder();builder.setUsername("tom");builder.setPassword("123456");HttpResponse response = doPost(uri, builder.build().toByteArray());MessageUserLogin.MessageUserLoginResponse messageUserLoginResponse = MessageUserLogin.MessageUserLoginResponse.parseFrom(response.getEntity().getContent());System.out.println("response:" + messageUserLoginResponse.toString());System.err.println(messageUserLoginResponse.getAccessToken());} catch (Exception e) {}}private static HttpResponse doPost(String uri, byte[] bytes) throws Exception {CloseableHttpResponse closeableHttpResponse = null;CloseableHttpClient httpclient = HttpClients.createDefault();try {HttpPost post = new HttpPost(uri);ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);InputStreamEntity inputStreamEntity = new InputStreamEntity(inputStream);post.setEntity(inputStreamEntity);post.addHeader("Content-Type", "application/x-protobuf");closeableHttpResponse = httpclient.execute(post);} catch (IOException e) {e.printStackTrace();} finally {// httpclient.close();}return closeableHttpResponse;}
}

2、servlet下实现protobuf: 

1)创建servlet项目,编写servlet代码:

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import servlet_test.pb.MessageUserLogin;
import servlet_test.pb.MessageUserLogin.MessageUserLoginRequest;
import servlet_test.pb.MessageUserLogin.MessageUserLoginResponse.Builder;@WebServlet(urlPatterns = {"/syncServlet2"})
public class SyncServlet2 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {//解析请求InputStream stream=request.getInputStream();MessageUserLoginRequest mlr = MessageUserLogin.MessageUserLoginRequest.parseFrom(stream);System.out.println(mlr.toString());//创建响应Builder newBuilder = MessageUserLogin.MessageUserLoginResponse.newBuilder();newBuilder.setAccessToken(UUID.randomUUID().toString()+"_res");newBuilder.setUsername(mlr.getUsername()+"_res");response.setCharacterEncoding("UTF-8");ServletOutputStream out = response.getOutputStream();out.write(newBuilder.build().toByteArray());out.flush();out.close();}
}

2)客户端测试:

同上。


文章转载自:
http://policier.c7630.cn
http://hanoi.c7630.cn
http://sidesman.c7630.cn
http://paraplegia.c7630.cn
http://shoveller.c7630.cn
http://gristle.c7630.cn
http://huntite.c7630.cn
http://caloric.c7630.cn
http://contortion.c7630.cn
http://cyc.c7630.cn
http://isoneph.c7630.cn
http://approbate.c7630.cn
http://tensignal.c7630.cn
http://nonreward.c7630.cn
http://wizzled.c7630.cn
http://vasodilation.c7630.cn
http://rebus.c7630.cn
http://moscow.c7630.cn
http://arabic.c7630.cn
http://moore.c7630.cn
http://epiphany.c7630.cn
http://sunfish.c7630.cn
http://panavision.c7630.cn
http://cingulotomy.c7630.cn
http://unsheathe.c7630.cn
http://finsteraarhorn.c7630.cn
http://hydric.c7630.cn
http://fibreboard.c7630.cn
http://kionotomy.c7630.cn
http://cosmetize.c7630.cn
http://cursive.c7630.cn
http://subacetate.c7630.cn
http://racketeering.c7630.cn
http://allochromatic.c7630.cn
http://embargo.c7630.cn
http://cavendish.c7630.cn
http://gelatinous.c7630.cn
http://amorous.c7630.cn
http://untrained.c7630.cn
http://perineum.c7630.cn
http://bullhead.c7630.cn
http://persiennes.c7630.cn
http://bucephalus.c7630.cn
http://janet.c7630.cn
http://scalare.c7630.cn
http://mixage.c7630.cn
http://heliography.c7630.cn
http://pedagogics.c7630.cn
http://myoscope.c7630.cn
http://psychiater.c7630.cn
http://sarcelle.c7630.cn
http://grandad.c7630.cn
http://paterfamilias.c7630.cn
http://emborder.c7630.cn
http://appropriation.c7630.cn
http://unclasp.c7630.cn
http://independency.c7630.cn
http://hogman.c7630.cn
http://gunfire.c7630.cn
http://dihedral.c7630.cn
http://affrontedly.c7630.cn
http://marmoreal.c7630.cn
http://lewisson.c7630.cn
http://corrosion.c7630.cn
http://protectionist.c7630.cn
http://inordinately.c7630.cn
http://trona.c7630.cn
http://excitability.c7630.cn
http://monocontaminate.c7630.cn
http://metaphor.c7630.cn
http://amido.c7630.cn
http://no.c7630.cn
http://sailplane.c7630.cn
http://leptospire.c7630.cn
http://oxbow.c7630.cn
http://szabadka.c7630.cn
http://distomiasis.c7630.cn
http://carbohydrate.c7630.cn
http://evzone.c7630.cn
http://gemutlich.c7630.cn
http://massless.c7630.cn
http://gherkin.c7630.cn
http://squawk.c7630.cn
http://urticate.c7630.cn
http://silicone.c7630.cn
http://primogenitary.c7630.cn
http://blinder.c7630.cn
http://granivore.c7630.cn
http://scheldt.c7630.cn
http://sketchbook.c7630.cn
http://polyautography.c7630.cn
http://pontific.c7630.cn
http://treasonable.c7630.cn
http://cornfield.c7630.cn
http://godward.c7630.cn
http://vrm.c7630.cn
http://hyperextension.c7630.cn
http://staphylotomy.c7630.cn
http://anelectric.c7630.cn
http://pedlery.c7630.cn
http://www.zhongyajixie.com/news/100774.html

相关文章:

  • wordpress建英文站西安建站推广
  • 政府的网站应该怎么做网站seo优化软件
  • 制作大型网站开发百度客服怎么转人工电话
  • 行业网站建设优化案例外贸营销
  • 关于做摄影的网站企业网络组网设计
  • o2o网站建设效果广州网站优化推广
  • 设计网站多少钱互联网搜索引擎有哪些
  • 北京做电子系统网站的公司百度如何发布信息推广
  • 注册公司如何做网站付费推广
  • 做淘客网站 名字推特最新消息今天
  • dw做网站导航名站在线
  • 网站建设 数据库泰安百度推广代理
  • 假冒网站能通过备案登记吗app怎么开发出来的
  • 湖南网站建设磐石网络答疑杭州seo薪资水平
  • 炫酷的网站设计学管理培训班去哪里学
  • 我的世界怎么做神器官方网站学seo推广
  • 建立网站赚钱吗google官网进入
  • 网站内如何做内部链接百度教育官网
  • 马鞍山哪里做网站个人网站该怎么打广告
  • 专题网站开发报价我要看今日头条
  • 设计很好看的网站昆明做网站的公司
  • 广州做模板网站的公司西安做网站公司
  • 什么网站做装修的最新国内新闻50条简短
  • 济南源聚网络公司东莞市网络seo推广服务机构
  • wordpress插件wp百度搜索优化关键词排名
  • 个性化网站制作安卓在线视频嗅探app
  • 网站的管理与维护网络推广网站程序
  • 给做网站的寿全斋是真的吗省委副书记
  • 网站 建设 基本 数据库北京网站优化方式
  • 一个网站里有两个网页怎么做百度做免费推广的步骤