怎么应用Protobuf 和Jersy 打造Rest Service

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么应用Protobuf 和Jersy 打造Rest Service相关的知识,希望对你有一定的参考价值。

参考技术A 如何应用Protobuf 和Jersy 打造Rest Service

我使用的是Maven Project,所以
1。第一步加入Maven Dependency。

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.4.1</version>
</dependency>

2。 然后,加入ant plugin来帮助我们产生protobuf 的java bean。

<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<mkdir dir='target/generated-sources' />
<exec executable='protoc'>
<arg value='--java_out=target/generated-sources' />
<arg value='src/main/resources/addressbook.proto' />
</exec>
</tasks>
<sourceRoot>target/generated-sources</sourceRoot>
</configuration>

</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-antrun-plugin
</artifactId>
<versionRange>[1.3,)</versionRange>
<goals>
<goal>run</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

3。 创建addressbook.proto文件

package tutorial;

option java_package = "com.sampullara.jaxrsprotobuf.tutorial";
option java_outer_classname = "AddressBookProtos";

message Person
required string name = 1;
required int32 id = 2;
optional string email = 3;

enum PhoneType
MOBILE = 0;
HOME = 1;
WORK = 2;


message PhoneNumber
required string number = 1;
optional PhoneType type = 2 [default = HOME];


repeated PhoneNumber phone = 4;


message AddressBook
repeated Person person = 1;


4。 运行mvn generate-sources命令来生成AddressBookProtos.java文件。
5。创建rest server端代码AddressBookService.java
package com.sampullara;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import com.sampullara.jaxrsprotobuf.tutorial.AddressBookProtos;

@Path("/person")
public class AddressBookService
@GET
@Produces("application/x-protobuf")
public AddressBookProtos.Person getPerson()
return AddressBookProtos.Person.newBuilder()
.setId(1)
.setName("Sam")
.setEmail("sam@sampullara.com")
.addPhone(AddressBookProtos.Person.PhoneNumber.newBuilder()
.setNumber("415-555-1212")
.setType(AddressBookProtos.Person.PhoneType.MOBILE)
.build())
.build();


@POST
@Consumes("application/x-protobuf")
@Produces("application/x-protobuf")
public AddressBookProtos.Person reflect(AddressBookProtos.Person person)
return person;



6。创建ProtobufProviders.java文件处理protobuf对象序列化。
package com.sampullara;

import com.google.protobuf.GeneratedMessage;
import com.google.protobuf.Message;

import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.WeakHashMap;本回答被提问者和网友采纳

im即时通讯开发:Protobuf数据传输格式

即时通讯应用(包括IM聊天应用、实时消息推送应用等)在选择数据传输格式的时候,相信没有真正实践过的人,都会犹豫该怎么选择。在即时通讯开发者同行的眼里,怎么选择其实是个极富争议话题。 Protobuf简介 一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是

以上是关于怎么应用Protobuf 和Jersy 打造Rest Service的主要内容,如果未能解决你的问题,请参考以下文章

在 Postman 的请求正文中传递多个 JSON 数据并使用 Jersy(JXRS) 进入 Java Rest API

im即时通讯开发:Protobuf数据传输格式

im即时通讯开发:Protobuf数据传输格式

大侠们unity怎么在lua中用protobuf的

protobuf repeated 怎么用的

protobuf repeated 怎么用的