JBoss Resteasy Json Client,如何设置:FAIL_ON_UNKNOWN_PROPERTIES

时间:2015-03-19 20:58:50

标签: java json client jboss7.x resteasy

我在JBoss 7.1上运行了一个WebService项目。它访问另一个JSON WebService。我正在使用RestEasy。 Maven项目。我知道额外的字段将添加到我正在调用的JSON Web服务中。我希望我的软件能够处理这个问题。 (只是跳过未知字段)

我想为此设置DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES。

我知道我必须在ObjectMapper上设置它。问题是:怎么样? 我无法找到从Resteasy(ResteasyClient)获取它的方法 我找不到设置/注册新ObjectMapper的方法。

我尝试过创建自定义ContextResolver:

@Provider
@Consumes(MediaType.APPLICATION_JSON)
public class JacksonIgnoreResolver implements ContextResolver<ObjectMapper> {
    private final ObjectMapper objectMapper;

    public JacksonIgnoreResolver() throws Exception
    {
        System.out.println("JacksonIgnoreResolver constructor called!");
        objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    @Override
    public ObjectMapper getContext(Class<?> arg0)
    {
        System.out.println("JacksonIgnoreResolver.getContext called!");
        return objectMapper;
    }    
}

我尝试了不同的注册方式。我没有web.xml(这是客户端)结束时:

JacksonIgnoreResolver resolver = new JacksonIgnoreResolver();
ResteasyProviderFactory.getInstance().registerProviderInstance(resolver);

调用构造函数,但函数getContext不是,因此它仍未被使用..

调用JSON Web服务的代码:

BasicHttpContext localContext = new BasicHttpContext();
DefaultHttpClient def = new DefaultHttpClient();
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(def, localContext);
ResteasyClient client = new ResteasyClientBuilder()
        .httpEngine(engine)
        .build();

JacksonIgnoreResolver resolver = new JacksonIgnoreResolver();
ResteasyProviderFactory.getInstance().registerProviderInstance(resolver);

ResteasyWebTarget web_target = client.target(baseURI + getCustomerUrl);
Customer customer = web_target.request(javax.ws.rs.core.MediaType.APPLICATION_JSON)
        .buildGet()
        .invoke(Customer.class);

我必须遗漏一些东西,这应该很简单。我猜大多数JSON客户端都是这样配置的。

0 个答案:

没有答案