如何为 Quarkus REST 客户端配置 ObjectMapper

How to configure ObjectMapper for Quarkus REST Client

我知道您可以实施 ObjectMapperCustomizer 来为您的 Quarkus REST 服务配置映射器。但是,Quarkus REST Client 的文档中并不清楚它是否会使用相同的(全局?)映射器。当外部服务与您自己的服务具有不同的 JSON 命名约定时,您如何处理这种情况?我找不到为 REST 客户端配置 ObjectMapper 的方法。我假设您可以使用 Jackson 注释来解决这个问题,但我正在寻找一种仅通过配置 ObjectMapper 来完成此操作的方法。

所以,基本上,问题是:如何为一个特定 REST 客户端配置一个单独 ObjectMapper?

我运行进入同样的问题。通过大量的尝试和错误,我发现了以下作品:

首先,定义一个 class 实现 JAX-RS ContextResolver:

public class ClientObjectMapper implements ContextResolver<ObjectMapper> {
    @Override
    public ObjectMapper getContext(Class<?> type) {
        ObjectMapper om = new ObjectMapper();
        om.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        om.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
        return om;
    }
}

然后在您的客户端界面上简单地添加 @RegisterProvider(ClientObjectMapper.class)

根据我目前所做的测试,这将有效地产生与您使用 ClientBuilder 手动构建 HTTP 客户端相同的效果。