Javascript 如何在java中发送responce时压缩Rest服务中的数据(对象)

Javascript 如何在java中发送responce时压缩Rest服务中的数据(对象),javascript,java,rest,Javascript,Java,Rest,我的代码是 @POST @Path("/getJSONCompareData") @Produces(MediaType.APPLICATION_JSON) public Object getJSONCompareData(@FormParam("testRunNum") String TRun,@FormParam("rptName") String reportName) { if(debugLevel>2) Log.debugLog(classNa

我的代码是

  @POST
  @Path("/getJSONCompareData")
  @Produces(MediaType.APPLICATION_JSON)
  public Object getJSONCompareData(@FormParam("testRunNum") String TRun,@FormParam("rptName") String reportName) {

   if(debugLevel>2)
      Log.debugLog(className, "getJSONStatsData", "", "", "Methad called");
      Object obj=null;
      try {
      int testRunNum = Integer.parseInt(TRun);
      String rptName = reportName;
      JSONParser parser=new JSONParser();
      String statsReportNameDir = Config.getWorkPath() + "/webapps/logs/TR" + testRunNum + "/reports/compareReports/" + rptName + "/compare.report";
                    obj=parser.parse(new FileReader(statsReportNameDir));
    }catch(Exception e){
      e.printStackTrace();
      Log.stackTraceLog(className, "getJSONStatsData", "", "", "Exception - ", e);
     }
          return obj;
   }
我读取的文件大小约为10MB

我想压缩数据,因为它需要1分钟通过网络


如何在ajax调用中压缩Obj和句柄

您可以在服务器上使用GZIP配置压缩JSON响应。
现代浏览器支持gzip压缩内容,Apache、Tomcat、JBoss等服务器也支持gzip压缩。

所以,若在服务器中启用了gzip,它将压缩数据,然后发送到客户端。
你们可以参考这篇文章


GZIP压缩不仅可以提高js、jsp文件的性能,还可以提高http请求的性能,因为数据将被压缩

您可以在服务器上使用GZIP配置压缩JSON响应。
现代浏览器支持gzip压缩内容,Apache、Tomcat、JBoss等服务器也支持gzip压缩。

所以,若在服务器中启用了gzip,它将压缩数据,然后发送到客户端。
你们可以参考这篇文章


GZIP压缩不仅可以提高js、jsp文件的性能,还可以提高http请求的性能,因为数据将被压缩

对于Rest服务中的压缩数据,您可以添加(创建)注释 我已经创建了一个注释名**@Compress**并在我的服务器上为其实现了代码

导入com.cavisson.gui.server.webdashboard.services.interceptors.Compress

这是我的压缩课

package com.cavisson.gui.server.webdashboard.services.interceptors;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.ws.rs.NameBinding;

    /**
     * @Compress annotation is the name binding annotation.
     */
    @NameBinding
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Compress {}
现在,我已经使用rum时的use将这个接口与我的类GZIPWriterInterceptor绑定在一起

package com.cavisson.gui.server.webdashboard.services.interceptors;

import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;

/**
 * This class is used for compressing data sending from server.
 */
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor
{
  @Override
  public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException
  {
    try
    {
      MultivaluedMap<String,Object> headers = context.getHeaders();
      headers.add("Content-Encoding", "gzip");

      final OutputStream outputStream = context.getOutputStream();
      context.setOutputStream(new GZIPOutputStream(outputStream));
      context.proceed();
    }
    catch(IOException | WebApplicationException  e)
    {
      e.printStackTrace();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
}
package com.cavisson.gui.server.webdashboard.services.interceptors;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.zip.GZIPOutputStream;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.ext.Provider;
导入javax.ws.rs.ext.WriterInterceptor;
导入javax.ws.rs.ext.WriterInterceptorContext;
/**
*此类用于压缩从服务器发送的数据。
*/
@提供者
@压缩
公共类GZIPWriterInterceptor实现WriterInterceptor
{
@凌驾
WriteTo(WriterInterceptorContext上下文)周围的public void引发IOException、WebApplicationException
{
尝试
{
多值Map headers=context.getHeaders();
添加(“内容编码”、“gzip”);
final OutputStream OutputStream=context.getOutputStream();
setOutputStream(新的gzip输出流(outputStream));
context.procedure();
}
捕获(IOException | WebApplicationException e)
{
e、 printStackTrace();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}

标题##对于Rest服务中的压缩数据,您已添加(创建)注释 我已经创建了一个注释名**@Compress**并在我的服务器上为其实现了代码

导入com.cavisson.gui.server.webdashboard.services.interceptors.Compress

这是我的压缩课

package com.cavisson.gui.server.webdashboard.services.interceptors;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.ws.rs.NameBinding;

    /**
     * @Compress annotation is the name binding annotation.
     */
    @NameBinding
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Compress {}
现在,我已经使用rum时的use将这个接口与我的类GZIPWriterInterceptor绑定在一起

package com.cavisson.gui.server.webdashboard.services.interceptors;

import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;

/**
 * This class is used for compressing data sending from server.
 */
@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor
{
  @Override
  public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException
  {
    try
    {
      MultivaluedMap<String,Object> headers = context.getHeaders();
      headers.add("Content-Encoding", "gzip");

      final OutputStream outputStream = context.getOutputStream();
      context.setOutputStream(new GZIPOutputStream(outputStream));
      context.proceed();
    }
    catch(IOException | WebApplicationException  e)
    {
      e.printStackTrace();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
}
package com.cavisson.gui.server.webdashboard.services.interceptors;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.util.zip.GZIPOutputStream;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.ext.Provider;
导入javax.ws.rs.ext.WriterInterceptor;
导入javax.ws.rs.ext.WriterInterceptorContext;
/**
*此类用于压缩从服务器发送的数据。
*/
@提供者
@压缩
公共类GZIPWriterInterceptor实现WriterInterceptor
{
@凌驾
WriteTo(WriterInterceptorContext上下文)周围的public void引发IOException、WebApplicationException
{
尝试
{
多值Map headers=context.getHeaders();
添加(“内容编码”、“gzip”);
final OutputStream OutputStream=context.getOutputStream();
setOutputStream(新的gzip输出流(outputStream));
context.procedure();
}
捕获(IOException | WebApplicationException e)
{
e、 printStackTrace();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}

标题###我认为您应该添加更多细节(也作为标记)关于您使用的框架。我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/GetJSOnComparedata我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/getJSONCompareData调用getJSONCompareData方法在这里,我正在读取一个大小约为10MB的文件,将其作为休息发送到我的js文件。我想压缩jSon对象并在REST中通过网络发送,如果我认为您应该添加更多细节(也作为标记)关于您使用的框架。我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/GetJSOnComparedata我使用jersey进行实现rest调用,从我的js文件中我点击request/dashboardserver/web/ReportWebservice/getJSONCompareData调用getJSONCompareData方法在这里,我正在读取一个大小约为10MB的文件,将其作为休息发送到我的js文件。我想压缩jSon对象并通过网络进行响应发送,如果restyes允许,我可以使用GZIP从jsp文件发送响应——response.setHeader(“Content Encoding”,“GZIP”);OutputStream outStreamObj=response.getOutputStream()//ByteArrayOutputStream bos=新的ByteArrayOutputStream(strJSONData.length());GZIPOutputStream gos=新的GZIPOutputStream(outStreamObj);write(jsonString.getBytes());gos.flush();gos.close();out.println(jsonString);但是我想为rest call做一次响应您必须设置**compression=“on”compressionMinSize=“2048”compresses