当前位置: 首页 > 知识库问答 >
问题:

Jersey 2.3拦截器示例不工作

赫连靖琪
2023-03-14

我正在尝试使用Tomcat 7和名称绑定实现这里的Jersey 2.3拦截器示例。我已经根据链接中显示的示例创建了以下内容。。。

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress{}

@Compress
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
  final OuputStream outputStream .....  
  ..some logging added here..
}

java prettyprint-override">@Path("helloword")
public class HelloWorldResource {

  @GET
  @Path("to-much-data")
  @Compress
  public String getVeryLongString(){
    String str = "a very ...
    ..... large string";
    return str;
  }
}

我没有在网络上添加任何额外内容。xml来注册拦截器,因为这在用户指南文档中没有讨论。我注意到这是早期版本Jersey中使用的方法。

我测试了压缩拦截器是否使用从泽西客户端api构建的客户端工作。我已经确保了HttpHeaders。ACCEPT_ENCODING,“gzip”Header被添加到调用。在发送请求之前的Builder。我还将日志记录添加到GZIPWriterInterceptor。当我测试以查看响应是否被压缩时,它会以纯文本形式返回(Content-Type-text/平原在响应标头中设置)并且我没有在日志中看到GZIPWriterInterceptor消息。

有人知道我做错了什么或者我还能尝试什么吗?

编辑-我更新了我的网站。xml尝试注册GZIPWriterInterceptor类。

......
.
<servlet>
  <servlet-name>Jersey Test Servlet</servlet-name>
  <servlet-value>org.glassfish.jersey.servlet.ServletContainer</servlet-value>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.test.jersey</param-value>
  </init-param>
  <init-param>
    <param-name>com.ws.rs.ext.WriterInterceptor</param-name>
    <param-value>com.test.jersey.GZIPWriterInterceptor</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
.
.......

这不起作用。我是否使用WriterInterceptor或其他参数名称注册GZIPWriterInterceptor?

更新-我通过扩展javax成功地实现了压缩。ws。rs.core。应用程序并注册我需要的每个类(HelloWorldResource.class、GZIPWriterInterceptor.class、Compress.class),如这里的部署无关应用程序模型所述。

我在网上注册了我的应用程序类。xml。。。

<display-name>JerseyInterceptorTest2</display-name>
  <servlet>
    <servlet-name>Jersey Rest Test</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.jersey.test.MyApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
     <servlet-name>Jersey Rest Test</servlet-name>
     <url-pattern>/*</url-pattern>
  </servlet-mapping>

我尝试按照示例4.2扩展ResourceConfig来注册我的包,但没有成功。通过早期的网络方法。xml

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.test.jersey</param-value>
</init-param>

目前还不清楚为什么包裹注册不起作用。

共有3个答案

柴修筠
2023-03-14

确保所有类(Compress、GZIPWriterInterceptor、HelloWorldResource)都位于web中参数“jersey.config.server.provider.packages”指定的相同包下。xml。

我突然想到,@NameBinding不起作用,我发现我把压缩文件放在了另一个包中。

卢宜然
2023-03-14

拦截器类也必须用提供者进行注释,如下所示:

@Provider
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor { ...

然后,这将在包扫描中被拾取。

这里的文档没有明确指定。

淳于功
2023-03-14

您需要做两件事:

  1. 从提供的代码片段来看,您的WriterInterceptor似乎没有使用压缩注释进行注释。请这样做,以确保提供程序和资源方法匹配在一起
  2. 您需要在JAX-RS应用程序类或通过web注册提供者。xml。文档对此可能有点含糊不清(我们会解决这个问题)
 类似资料:
  • 本文向大家介绍SpringBoot拦截器实现登录拦截的方法示例,包括了SpringBoot拦截器实现登录拦截的方法示例的使用技巧和注意事项,需要的朋友参考一下 源码 GitHub:https://github.com/291685399/springboot-learning/tree/master/springboot-interceptor01 SpringBoot拦截器可以做什么 可以对UR

  • 本文向大家介绍springmvc拦截器登录验证示例,包括了springmvc拦截器登录验证示例的使用技巧和注意事项,需要的朋友参考一下 一开始,学了拦截器与过滤器,咋一看两者有点像,实际上两者有很大的不同。就用拦截器和过滤器分别做了登录验证试验,这次先说拦截器。下面是自己实践的一个实例: 在spring-mvc.xml中配置拦截器: 如上所示,这里配置了LoginIntercepter,为了简单起

  • 现在,当我到达spring-boot应用程序的endpoint时,它工作得很好 基本上,它根本不调用preandle。我错过了什么????

  • 主要内容:1. 动作,2. JSP页面,3. 执行和等待拦截器,4. 示例,参考在Struts2中附带一个名为“execAndWait”一个非常有趣的“执行和等待”拦截器,这是一个非常方便的拦截器长时间运行操作在后台,显示用户的自定义的等待页面。在本教程中,它显示了一个完整的使用 Struts2 execAndWait 拦截器的例子。 1. 动作 一个普通的动作类,有一个长时间运行进程,证明了execAndWait效果。 LongProcessAction.java 2. J

  • easyopen在1.3.1版本开始支持拦截器。 easyopen拦截器实现原理跟springmvc拦截器类似,拦截器作用在api方法上,即有@Api注解的方法。 拦截器定义如下: /** * 拦截器,原理同springmvc拦截器 * @author tanghc * */ public interface ApiInterceptor { /** * 预处理回调方法,

  • 你可以配置处理器拦截器HandlerInterceptors或web请求拦截器WebRequestInterceptors等拦截器,并配置它们拦截所有进入容器的请求,或限定到符合特定模式的URL路径。 在MVC Java编程配置下注册拦截器的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure