我在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客户端都是这样配置的。