4

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

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

4

1 回答 1

6

我遇到了同样的问题。通过大量的试验和错误,我发现了以下作品:

首先,定义一个实现 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 客户端相同的效果。

于 2020-08-23T00:45:35.840 回答