【问题标题】:Spring MVC Rest: How to implement partial response in Json and XML?Spring MVC Rest:如何在 Json 和 XML 中实现部分响应?
【发布时间】:2012-09-26 19:22:09
【问题描述】:

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

【问题讨论】:

    标签: spring rest spring-mvc jackson xstream


    【解决方案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
      }
      

    【讨论】:

    • 感谢@matt,但这种方法仅适用于 JSon 而不是 XML 输出,并且返回 Map 它太抽象了,这样做我会失去返回的语义。我会继续寻找更好的解决方案并通知您。
    • 现在我在我的类 @JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT) public class MyClass {} 中添加了一个注释,并将我不喜欢打印的值设置为 Null。 (Spring 中默认的 xml 行为是不打印空值)
    • @wandi.darko 你有没有找到一个好方法来做到这一点?我一直在寻找一个好方法,除了 Yoga github.com/skyscreamer/yoga 库之外,我还没有发现任何可行的方法。
    猜你喜欢
    • 2016-11-13
    • 2011-09-21
    • 2013-08-12
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多