【发布时间】:2016-09-24 19:46:23
【问题描述】:
我正在使用 Spring-Boot 1.3 开发休息服务。在此,我必须根据请求输入参数(e.g. ../employees?opFields=name,emailId,..) 中提供的字段(包括)返回部分响应。
我想实现jackson.antpathfilter(基于 AntPath 匹配添加过滤的实现)。我必须添加配置,这样我就不需要更改 Rest(Controller) 服务方法的返回类型。但是基于特定类的对象实例,使用过滤器进行序列化,否则使用正常的序列化。过滤器应仅应用于特定类的实例。
更新 基本上我想实现动态部分响应, 1) 从请求中动态检索 opFields。 2)根据对象类型设置过滤器(可以是antpathbuilder或simple) 3)不改变(rest)控制器方法的返回类型。
到目前为止,我已经添加了如下配置,但它在 ExceptionHandler 中给出了问题。
@Configuration
public class CustomDispatcherServlet extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(final List<HttpMessageConverter<?>> messageConverters) {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().mixIn(Object.class, AntPathFilterMixin.class).build();
messageConverters.add(new MappingJackson2HttpMessageConverter(objectMapper));
extendMessageConverters(messageConverters);
}
}
我正在扩展MappingJacksonValue,如下所示,并使用类对象发送休息呼叫响应,
public class FilteredResponse extends MappingJacksonValue {
public FilteredResponse(final Object value, final String... opFields) {
super(value);
if (null == opFields || opFields.length <= 0) {
setFilters(new SimpleFilterProvider().addFilter("antPathFilter", new AntPathPropertyFilter("**")));
} else {
setFilters(new SimpleFilterProvider().addFilter("antPathFilter", new AntPathPropertyFilter(opFields)));
}
}
}
如果对象不是 JacksonResponse 类,这样做会给我带来更多问题。另外,我必须在每个控制器方法处创建对象,并在需要部分响应的地方更改返回类型。
我们可以动态检查对象实例并设置过滤器吗?还是有其他解决方案?
【问题讨论】:
标签: json spring rest serialization jackson