Java 在Jersey中使用名称绑定注释

Java 在Jersey中使用名称绑定注释,java,rest,jersey,Java,Rest,Jersey,@NameBinding注释在Jersey中如何在特定的资源方法或资源类上应用过滤器 考虑以下注释: @NameBinding @保留(RetentionPolicy.RUNTIME) @目标({ElementType.METHOD,ElementType.TYPE}) public@interface someannotation{} 它是如何工作的?名称绑定 名称绑定是一个概念,它允许对JAX-RS运行时说,特定的过滤器或拦截器将只针对特定的资源方法执行。当筛选器或拦截器仅限于特定的资源方

@NameBinding
注释在Jersey中如何在特定的资源方法或资源类上应用过滤器

考虑以下注释:

@NameBinding
@保留(RetentionPolicy.RUNTIME)
@目标({ElementType.METHOD,ElementType.TYPE})
public@interface someannotation{}
它是如何工作的?

名称绑定 名称绑定是一个概念,它允许对JAX-RS运行时说,特定的过滤器或拦截器将只针对特定的资源方法执行。当筛选器或拦截器仅限于特定的资源方法时,我们称其为名称绑定。没有这种限制的过滤器和拦截器称为全局过滤器和拦截器

定义名称绑定注释 可以使用注释将过滤器或拦截器分配给资源方法。此注释用作应用于提供者和资源方法的其他用户实现注释的元注释。请参见以下示例:

@NameBinding
@保留(RetentionPolicy.RUNTIME)
公共@接口压缩{}
上面的示例定义了一个新的
@Compress
注释,它是一个名称绑定注释,因为它是用注释的。
@Compress
注释可用于将过滤器和拦截器绑定到端点

将筛选器或侦听器绑定到终结点 假设您有一个执行GZIP压缩的拦截器,并且希望将该拦截器绑定到一个资源方法。为此,请对资源方法和拦截器进行注释,如下所示:

压缩 公共类GZIPWriterInterceptor实现WriterInterceptor{ @凌驾 WriteTo周围的公共无效(WriterInterceptorContext上下文) 抛出IOException、WebApplicationException{ final OutputStream OutputStream=context.getOutputStream(); setOutputStream(新的gzip输出流(outputStream)); context.procedure(); } }
@Path(“helloworld”)
公共类HelloWorldResource{
@得到
@生成(“文本/纯文本”)
公共字符串getHello(){
返回“你好,世界!”;
}
@得到
@路径(“数据过多”)
@压缩
公共字符串getVeryLongString(){
String str=…//非常长的字符串
返回str;
}
}
@Compress
应用于资源方法
getVeryLongString()
和拦截器
GZIPWriterInterceptor
。只有在执行带有此类注释的任何资源方法时,才会执行拦截器

在上面的示例中,拦截器将仅对
getVeryLongString()
方法执行。将不对方法
getHello()
执行侦听器。在这个例子中,原因可能很清楚。我们只想压缩长数据,不需要压缩
“Hello World!”
的短响应

名称绑定可以应用于资源类。在示例中,
HelloWorldResource
将使用
@Compress
进行注释。这意味着在这种情况下,所有资源方法都将使用压缩

请注意,全局过滤器总是执行的,即使对于具有任何名称绑定注释的资源方法也是如此

文档
例子

您是在问它在引擎盖下是如何工作的吗?或者只是如何使用它?