我需要忽略基于用户输入/或Spring安全角色的对象响应的某些属性的序列化(JSon / Jackson和XML / XStream)(就像你没有权限看到这个字段的内容一样) ,但所有其他人都可以等)。在Spring MVC Rest中如何做到这一点的最佳方法是什么? 其他方法仅显示与api用户相关的属性,如此处所述http://googlecode.blogspot.com.br/2010/03/making-apis-faster-introducing-partial.html
答案 0 :(得分:1)
如果您使用的是Jackson,可以使用以下选项来修改Json序列化:
使用@JsonIgnore注释 - 但是,这是静态过滤,并且不允许您根据需要实施基于规则的过滤
使用@JsonFilter - 这将允许您实现一个接口,您可以在其中提供序列化过滤逻辑。你可能会发现这个解决方案太重了。
我经常解决这个问题的方法是从我的Controller方法而不是底层对象返回一个Map。您可以编写处理代码,将对象中的相关字段放入Map中,从而使您可以完全控制序列化的内容。您可以在Object上包含一个方法来进行转换。该方法可能如下所示:
// RequestObj is whatever 'input' object that indicates what should be filtered
public Map<String,Object> convertToMapForRequest(RequestObj request){
// Build return map based on 'this' and request
}