我可以指定ObjectMapper
Spring RestTemplate
使用的Jackson 吗?
我不是100%这就是我需要做的,但请参阅下面的详细信息。
背景: 在此StackOverflow帖子的帮助下,我在域类中添加了@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:无法解析ID为'apiFilter'的BeanPropertyFilter。未配置FilterProvider
在org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:453)
为简洁起见,其余的堆栈跟踪被省略
引起原因:org.codehaus.jackson.map.JsonMappingException:无法解析ID为'apiFilter'的BeanPropertyFilter。未配置FilterProvider
在org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)
我在服务器端遇到了类似的问题,并且可以通过给Jackson 如下所示来解决此问题(在此职位的帮助下):FilterProvider
ObjectMapper
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));
Run Code Online (Sandbox Code Playgroud)
我可以在RestTemplate端做类似的事情吗?任何有关如何解决此问题的想法都将受到赞赏。
为了清楚起见,在客户端RestTemplate端,我根本不想过滤域对象属性。
我可以指定Spring的RestTemplate使用的Jackson ObjectMapper吗?
通过执行以下操作,我可以强制RestTemplate使用自定义的ObjectMapper:
ObjectMapper mapper = new ObjectMapper();
// set a custom filter
Set<String> filterProperties = new HashSet<String>();
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.serializeAllExcept(filterProperties));
mapper.setFilters(filters);
MappingJacksonHttpMessageConverter messageConverter = new MappingJacksonHttpMessageConverter();
messageConverter.setObjectMapper(mapper);
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(messageConverter);
restTemplate.setMessageConverters(messageConverters);
Run Code Online (Sandbox Code Playgroud)
该网站提供了部分上述代码的示例。
归档时间: |
|
查看次数: |
5195 次 |
最近记录: |