stEasyClientBuild注册ResteasyJacks

stEasyClientBuild注册ResteasyJacks

本文介绍了RestEasyClientBuild注册ResteasyJackson2Provider-关于重复的警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using the org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder to build a REST client in the following way:

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

在其中注册的jacksonProviderResteasyJackson2Provider jacksonProvider = new ResteasyJackson2Provider();,它带有自定义ObjectMapper,这对于反序列化很重要.到目前为止,问题是,我在JBoss中收到以下警告:

The jacksonProvider that is registered there is a ResteasyJackson2Provider jacksonProvider = new ResteasyJackson2Provider(); which comes with a custom ObjectMapper that is important for deserialization. So far so good, the problem is, that I get the following warning in 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,这些jar中包含描述应注册内置"提供程序的资源.

This makes sense if I check the documentation when there already has been an instance of the same class that has been registered before. I used a decompiler to check what ResteasyClientBuilder is doing and was able to see, that it scans the classpath for jars that contain a resource that describes what "built in" providers should be registered.

jboss提供的一种实现方式现在显然已经定义了一个ResteasyJackson2Provider,该ResteasyJackson2Provider在那里注册了,这使我以后无法注册自己的实例.

One of the jboss provided implementations is now apparently already defining a ResteasyJackson2Provider that is registered there making it impossible for me to later register my own instance of it.

我在这里有什么选择?我需要将ResteasyJackson2Provider的版本-至少将ObjectMapper放入客户端.我可以以某种方式替换现有的吗?

What are my options here? I need to get my version of the ResteasyJackson2Provider - or at least the ObjectMapperinto the client. Can I somehow replace the existing one?

推荐答案

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

I had the same issue, but I did not want to remove the resteasy-jackson2-provider dependencies because we added that dependency explicitly for other parts of the system (using undertow, not full AS).

结果证明,您可以扩展org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider而无需添加/覆盖任何内容,因此可以以比从类路径(没有优先级注册)中获取的默认org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider更高的优先级进行注册.这样,您可以确保您的ResteasyJackson2Provider将被选中,而不是通过类路径扫描选择的.

Turns out you can just extend the org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider without adding/overriding anything so you can register it with a higher priority than the default org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider picked up from the classpath (which is registered without a priority). This way you ensure your ResteasyJackson2Provider will be chosen over the one picked up via classpath scanning.

扩展为自定义" ResteasyJackson2Provider:

public class CustomResteasyJackson2Provider extends ResteasyJackson2Provider {
}

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

Plug that in to the ResteasyClientBuilder with your customized ObjectMapper:

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();

希望这会有所帮助.

这篇关于RestEasyClientBuild注册ResteasyJackson2Provider-关于重复的警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-28 07:03