gpt4 book ai didi

java - 自动向 Jersey 客户端注册 ClientResponseFilter 和其他提供程序

转载 作者:行者123 更新时间:2023-11-30 06:03:43 25 4
gpt4 key购买 nike

是否有任何方法可以在不使用 WebTargetClient 上的 register() 方法的情况下自动注册 ClientResponseFilter >?我正在寻找类似于 @Provider 注释的东西,它只能在 ContainerResponseFilter/ContainerRequestFilter 中使用。

最佳答案

不幸的是,客户端没有实现扫描功能。最接近自动注册的方法是使用 SPIs (Service Provider Interfaces) 。任何支持的 SPI 将特定于 JAX-RS 实现。在 this post ,您可以看到如何将 MessageBodyReader 实现为 SPI,并且 JAX-RS 实现可能自动注册它。

正如前面提到的,由 JAX-RS 实现来决定它想要支持哪些 SPI。对于 Jersey,最通用的 SPI 是 AutoDisoverable .

public interface AutoDiscoverable {
public void configure(FeatureContext context);
}

您只需实现此接口(interface),并使用 FeatureContext 注册您想要的任何提供程序。然后创建一个文件

/META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable

然后将实现的完全限定名称放入该文件中。 Jersey 运行时将发现此文件并调用您的 configure() 方法。

AutoDiscoverable 的一个示例是 JacksonAutoDiscoverable 。和the SPI file 。当我们添加 jersey-media-json-jackson依赖于我们的项目,Jersey 将找到 AutoDiscoverable 的 SPI 实现,并调用 configure() 方法,该方法注册 JacksonFeature,因此我们不需要自己手动注册。

自动发现或大多数 SPI 通常是与可重用库一起使用。通常,对于您的提供程序仅用于该特定项目的项目,向提供程序添加自动发现功能只会增加不必要的工作。手动注册提供商会更容易。但是,如果您想创建一个可以重用的库,并且希望用户不必显式注册任何提供程序或功能,那么您可能需要实现自动发现。

<小时/>

更多详细信息

如果您要实现AutoDiscoverable,我应该提到的一件事是我们可以对其应用到哪个运行时施加约束;客户端或服务器,我们使用 @ConstrainedTo 注释来实现。

@ConstrainedTo(RuntimeType.CLIENT)
public class MyAutoDiscoverable implements AutoDiscoverable {}

如果您的 AutoDiscoverable 注册了 ClientRequestFilter,那么您不希望服务器注册它,因此您会限制客户端运行时。

关于java - 自动向 Jersey 客户端注册 ClientResponseFilter 和其他提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com