gpt4 book ai didi

使用@JsonFilter 时,带有 Jackson 的 Spring RestTemplate 抛出 "Can not resolve BeanPropertyFilter"

转载 作者:行者123 更新时间:2023-12-05 01:48:37 49 4
gpt4 key购买 nike

我可以指定 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 error: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured; nested exception is org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured

at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:453)

rest of stack trace omitted for brevity

Caused by: org.codehaus.jackson.map.JsonMappingException: Can not resolve BeanPropertyFilter with id 'apiFilter'; no FilterProvider configured

at org.codehaus.jackson.map.ser.BeanSerializer.findFilter(BeanSerializer.java:252)

我在服务器端遇到了类似的问题,并且能够通过向 Jackson ObjectMapper 提供 FilterProvider 来解决它(在 this post 的帮助下)如下:

ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("apiFilter", SimpleBeanPropertyFilter.filterOutAllExcept(filterProperties));

我可以在 RestTemplate 端做类似的事情吗?对如何解决此问题的任何想法表示赞赏。

明确一点,在客户端 RestTemplate 端,我根本不想过滤域对象属性。

最佳答案

Can I specify the Jackson ObjectMapper that Spring's RestTemplate uses?

通过执行以下操作,我能够强制 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);

This website提供了上述部分代码的示例。

关于使用@JsonFilter 时,带有 Jackson 的 Spring RestTemplate 抛出 "Can not resolve BeanPropertyFilter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397061/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com