2

我需要根据用户输入/或 Spring 安全角色忽略我的对象响应中某些属性的序列化(JSon/Jackson 和 XML/XStream)(就像您无权查看该字段的内容,但所有其他都可以等)。在 Spring MVC Rest 中执行此操作的最佳方法是什么?其他方法是仅显示与 api 用户相关的属性,如此处所述http://googlecode.blogspot.com.br/2010/03/making-apis-faster-introducing-partial.html

4

1 回答 1

1

如果您使用的是 Jackson,这里有一些可能的选项来修改 Json 序列化:

  1. 使用@JsonIgnore注释 - 但是,这是静态过滤,不允许您根据需要实施基于规则的过滤

  2. 使用@JsonFilter - 这将允许您实现一个接口,您可以在其中提供您的序列化过滤逻辑。您可能会发现这是一个过于重量级的解决方案。

  3. 我经常解决这个问题的方法是从我的 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
    }
    
于 2012-09-26T23:13:16.450 回答