【发布时间】:2012-03-12 21:56:59
【问题描述】:
我可以指定 Spring 的 RestTemplate 使用的 Jackson ObjectMapper 吗?
我不是 100% 这就是我需要做的,但请参阅下面的详细信息。
背景: 在this StackOverflow post 的帮助下,我将@JsonFilter 添加到我的域类并编辑了我的jax-rs Web 服务(在CXF 中实现)。我现在能够成功地动态选择要在我的 RESTful API 中返回的域类字段。到目前为止一切顺利。
我在我的 JUnit 测试中使用 Spring 的 RestTemplate 来测试我的 RESTful API。在我将 @JasonFilter 添加到我的域类之前,这一切正常。现在我得到以下异常:
org.springframework.web.client.ResourceAccessException:I/O 错误:无法解析带有 id 'apiFilter' 的 BeanPropertyFilter;未配置 FilterProvider;嵌套异常是 org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter';没有配置 FilterProvider
在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:453)
为简洁起见省略了其余的堆栈跟踪
原因:org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter';没有配置 FilterProvider
在 org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)
我在服务器端遇到了类似的问题,并且能够通过将FilterProvider 提供给 Jackson ObjectMapper 来解决它(在 this post 的帮助下),如下所示:
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
我可以在 RestTemplate 端做类似的事情吗?任何有关如何解决此问题的想法都值得赞赏。
需要明确的是,在客户端 RestTemplate 端,我根本不想过滤域对象属性。
【问题讨论】: