Java 将gzip压缩后的json发送到jersey服务

Java 将gzip压缩后的json发送到jersey服务,java,jersey,jersey-client,Java,Jersey,Jersey Client,Jersey webmethod接收json并返回json,我创建了一个客户端,用gzip编码发布json,我不知道这是正确的方式来编码要发布的json,我想确认请求体是否真的被压缩了 这是一个简单的方法 @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("/getgzip") public RPGZIP postDocument(RGZIP gzip){

Jersey webmethod接收json并返回json,我创建了一个客户端,用gzip编码发布json,我不知道这是正确的方式来编码要发布的json,我想确认请求体是否真的被压缩了

这是一个简单的方法

 @POST
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 @Path("/getgzip")
 public RPGZIP postDocument(RGZIP gzip){         
     RPGZIP _response = new RPGZIP();
     _response.rpid = gzip.docid;
     _response.rpdata = gzip.docdata; 
     return _response;
 }
这是要使用的客户端类

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import com.gzip.RGZIP;
import org.glassfish.jersey.message.GZipEncoder;
public class rclient {
public static void main(String[] args){
     String REST_URI   = 
    "http://localhost:8084/TestGZip/webresources/gzip/getgzip";  
     Client client = ClientBuilder.newClient();
     client.register(GZipEncoder.class);
     RGZIP rzip = new RGZIP();
     rzip.docid = 1234;
     rzip.docdata = "Working..";         
     Response r =   
          client.target(REST_URI).request(MediaType.APPLICATION_JSON)
          .post(Entity.entity(rzip, MediaType.APPLICATION_JSON));
     System.out.println(r.readEntity(String.class));
}
}

要知道您的请求已被压缩,必须向服务器发送一个请求头,如
Content Encoding:gzip
,以便服务器知道必须解压缩负载


您所做的在代码中是正确的

要知道您的请求已被压缩,必须向服务器发送一个请求头,如
内容编码:gzip
,以便服务器知道必须解压缩负载


您所做的在代码中是正确的

我的同事试图将压缩后的json发布到jersey方法,但他得到了套接字错误?他告诉我应该添加并注册gzip ReaderInterceptor来使用压缩请求?我已经检查了来自netbeans的请求头,上面的代码没有设置内容编码。如何设置内容编码?因为您在创建实体时覆盖了它。将代码更改为
client.target(REST\u URI).request(MediaType.APPLICATION\u JSON).post(Entity.Entity(rzip,新变体(MediaType.APPLICATION\u JSON\u TYPE,“en”,“gzip”)
您将看到内容编码。但你的问题是什么?您正在从客户端编码转换到服务器端编码,再转换到拦截器?您是否无法从客户端发送gzip编码的有效负载,或者您是否无法在服务器中使用gzip编码的有效负载?在更新服务器端的代码无错误后,我收到“HTTP状态400-错误请求”。我应该添加reader拦截器类来接收压缩的json吗?我的同事试图将压缩的json发布到jersey方法,但他收到套接字错误?他告诉我应该添加并注册gzip ReaderInterceptor来使用压缩请求?我已经检查了来自netbeans的请求头,上面的代码没有设置内容编码。如何设置内容编码?因为您在创建实体时覆盖了它。将代码更改为
client.target(REST\u URI).request(MediaType.APPLICATION\u JSON).post(Entity.Entity(rzip,新变体(MediaType.APPLICATION\u JSON\u TYPE,“en”,“gzip”)
您将看到内容编码。但你的问题是什么?您正在从客户端编码转换到服务器端编码,再转换到拦截器?您是否无法从客户端发送gzip编码的有效负载,或者您是否无法在服务器中使用gzip编码的有效负载?在更新服务器端的代码无错误后,我收到“HTTP状态400-错误请求”。我应该添加reader拦截器类来接收压缩的json吗?