定制jackson序列化的resteasy客户端

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

我试过做类似的事情:

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

但它没有用。 有任何想法吗?

您只能注册提供商或function等JAX-RS组件。 您需要注册一个带有ObjectMapper的Provider,该ObjectMap带有一个已注册序列化程序的Module。

 ResteasyJacksonProvider resteasyJacksonProvider = new ResteasyJacksonProvider(); ObjectMapper mapper = new ObjectMapper(); SimpleModule myModule = new SimpleModule("myModule", new Version(1, 0, 0, null)); myModule.addSerializer(Custom.class, new CustomSerializer()); mapper.registerModule(myModule); resteasyJacksonProvider.setMapper(mapper); 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... } }