如何为Quarkus REST客户端配置ObjectMapper

时间:2020-05-24 10:01:56

标签: java jackson quarkus microprofile quarkus-rest-client

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

因此,基本上,问题是:如何为一个 REST客户端配置单独 ObjectMapper?

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。经过反复试验,我发现以下作品:

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