SpringMVC&jackson动态过滤

LinkRay 2016-03-18 10:07:31
使用spring4.2.4和jackson2.7.2处理@ResponseBody时,想要动态过滤掉一些不必要属性。网上找了很多资料,有几种实现方式:
1、使用@JsonIgnore。这种是固定的,无法满足动态的需求,不是自己定义的类无法处理,
2、使用@JsonView。这个能动态实现,但依然无法处理非自定义的类。
3、使用FilterProvider,这种实现方式需要自己用ObjectMapper把JavaBean转换成JSON。我不太喜欢这种方式。
我查看Spring源码AbstractJackson2HttpMessageConverter(MappingJackson2HttpMessageConverter的父类)中的writeInternal方法:

@Override
@SuppressWarnings("deprecation")
protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {

JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType());
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(outputMessage.getBody(), encoding);
try {
writePrefix(generator, object);

Class<?> serializationView = null;
FilterProvider filters = null;
Object value = object;
JavaType javaType = null;
if (object instanceof MappingJacksonValue) {
MappingJacksonValue container = (MappingJacksonValue) object;
value = container.getValue();
serializationView = container.getSerializationView();
filters = container.getFilters();
}
if (jackson26Available && type != null && value != null && TypeUtils.isAssignable(type, value.getClass())) {
javaType = getJavaType(type, null);
}
ObjectWriter objectWriter;
if (serializationView != null) {
objectWriter = this.objectMapper.writerWithView(serializationView);
}
else if (filters != null) {
objectWriter = this.objectMapper.writer(filters);
}
else {
objectWriter = this.objectMapper.writer();
}
if (javaType != null && javaType.isContainerType()) {
objectWriter = objectWriter.withType(javaType);
}
objectWriter.writeValue(generator, value);

writeSuffix(generator, object);
generator.flush();

}
catch (JsonProcessingException ex) {
throw new HttpMessageNotWritableException("Could not write content: " + ex.getMessage(), ex);
}
}

发现spring应该是支持FilterProvider的,所以在控制器中构建一个MappingJacksonValue并返回,但没起作用。
请问:怎么做才能使FilterProvider起作用。
...全文
136 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞翔的空指针 2016-03-19
  • 打赏
  • 举报
回复
bzd

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧