Java resteasy客户端的自定义Jackson序列化程序

Java resteasy客户端的自定义Jackson序列化程序,java,jakarta-ee,jax-rs,resteasy,Java,Jakarta Ee,Jax Rs,Resteasy,是否可以为resteasy客户端注册自定义Jackson JSON序列化程序 我试着做一些类似的事情: ResteasyClient client = new ResteasyClientBuilder() .register(new CustomSerializer()) .build(); 但它不起作用。有什么想法吗?您只能注册JAX-RS组件,如或。 您需要注册一个带有ObjectMapper的提供程序,ObjectMapper带有注册了序

是否可以为resteasy客户端注册自定义Jackson JSON序列化程序

我试着做一些类似的事情:

ResteasyClient client = new ResteasyClientBuilder()
            .register(new CustomSerializer())
            .build();

但它不起作用。有什么想法吗?

您只能注册JAX-RS组件,如或。 您需要注册一个带有ObjectMapper的提供程序,ObjectMapper带有注册了序列化程序的模块

ResteasyJacksonProvider ResteasyJacksonProvider=new ResteasyJacksonProvider();
ObjectMapper mapper=新的ObjectMapper();
SimpleModule myModule=新的SimpleModule(“myModule”,新版本(1,0,0,null));
myModule.addSerializer(Custom.class,新的CustomSerializer());
mapper.registerModule(myModule);
resteasyJacksonProvider.setMapper(映射器);
ResteasyClient client=new ResteasyClientBuilder().register(resteasyJacksonProvider.build();

请注意,此示例使用的类来自
org.codehaus.jackson
。来自
com.fasterxml.jackson
的API看起来略有不同。

替代解决方案

查看源代码,
ResteasyJackson2Provider
有以下注释

    @Provider
    @Consumes({"application/*+json", "text/json"})
    @Produces({"application/*+json", "text/json"})
因此,我更愿意创建一个带有特定注释的提供者类,以确保首先选择它:

    public class RestEasyClientJackson {
        private ObjectMapper mapper;

        private JacksonJsonProvider provider;

        private Client client;

        @Before
        public void setUp() throws Exception {
           mapper = new ObjectMapper();
           mapper = mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

           provider = new MyProvider(mapper);

           client = ClientBuilder.newBuilder().register(provider).build();
        }

        @Provider
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        class MyProvider extends JacksonJsonProvider {
            MyProvider(ObjectMapper mapper) {
               super(mapper);
        }

        @Test
        public void myTest() throws Exception {
            // some test code...
        }
  }

但我的自定义json提供程序仍在使用上述方法调用。这将不起作用-至少在当前库中是这样。ResteasyClientBuilder的内部提供程序工厂将忽略resteasyJacksonProvider实例注册,因为resteasyJacksonProvider类已注册。解决方案是注册一个子类的实例——匿名就可以了。