gpt4 book ai didi

java - RestEasyClientBuild 注册 ResteasyJackson2Provider - 关于重复的警告

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:18 24 4
gpt4 key购买 nike

我正在使用 org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder 按照以下方式构建 REST 客户端:

ResteasyClient client = (new ResteasyClientBuilder())
.maxPooledPerRoute(5)
.connectionPoolSize(10)
.socketTimeout(10L, TimeUnit.SECONDS)
.register(jacksonProvider)
.register(new RestClientLogger())
.register(new RestClientMDCFilter())
.build();

在那里注册的 jacksonProvider 有一个 ResteasyJackson2Provider jacksonProvider = new ResteasyJackson2Provider();,它带有一个自定义的 ObjectMapper,这对反序列化。到目前为止一切顺利,问题是,我在 JBoss 中收到以下警告:

10:31:38,414 WARN  [org.jboss.resteasy.resteasy_jaxrs.i18n] (default-threads - 1) RESTEASY002155: Provider class org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider is already registered.  2nd registration is being ignored.

如果我在之前已经注册过相同类的实例的情况下检查文档,这是有道理的。我使用了一个反编译器来检查 ResteasyClientBuilder 正在做什么并且能够看到,它扫描类路径以查找包含描述应注册“内置”提供程序的资源的 jar。

其中一个 jboss 提供的实现显然已经定义了一个 ResteasyJackson2Provider 并在那里注册,这使得我以后无法注册我自己的实例。

我在这里有哪些选择?我需要将我的 ResteasyJackson2Provider 版本或至少 ObjectMapper 放入客户端。我能以某种方式替换现有的吗?

最佳答案

我有同样的问题,但我不想删除 resteasy-jackson2-provider 依赖项,因为我们为系统的其他部分明确添加了该依赖项(使用 undertow,而不是完整的 AS) .

原来你可以只扩展 org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider 而不添加/覆盖任何东西所以你可以用比默认 更高的优先级注册它org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider 从类路径中获取(没有优先级注册)。通过这种方式,您可以确保选择您的 ResteasyJackson2Provider 而不是通过类路径扫描选择的那个。

扩展到“自定义”ResteasyJackson2Provider:

public class CustomResteasyJackson2Provider extends ResteasyJackson2Provider {
}

使用自定义的 ObjectMapper 将其插入到 ResteasyClientBuilder 中:

ObjectMapper objectMapper = new ObjectMapper();
// customize your objectMapper here...
CustomResteasyJackson2Provider jacksonProvider = new CustomResteasyJackson2Provider();
jacksonProvider.setMapper(objectMapper); // add objectMapper to provider

// register provider to client
ResteasyClient client = new ResteasyClientBuilder()
.register(jacksonProvider, 100) // any priority over 0 will do
.build();

希望这对您有所帮助。

关于java - RestEasyClientBuild 注册 ResteasyJackson2Provider - 关于重复的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43887741/

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