【问题标题】:JSONView annotation with include/exclude attribute具有包含/排除属性的 JSONView 注释
【发布时间】:2012-11-22 02:31:28
【问题描述】:

我有一个用例,似乎更适合将 JSONView 注释与排除信息一起使用,例如:

@JSONView(Views.Report1.class, include=false)

截至目前,Jackson (1.9.2) 不直接支持(包括属性),我想知道 Jackson 是否有一个简单的解决方法来实现这一点。

用例:

  • Report1:该视图应具有id, name, info1, info2, info3, info4 属性
  • Report2 : 此视图应具有 id, name, info1, info2, info4 属性
  • 报告[3 ..] 说许多其他观点是可能的
私人 int id; 私有字符串名称; 私人字符串信息1; 私人字符串信息2; //如果 view=report2 则忽略 @JsonView(ReportViews.Report2.class , include=false) 私有字符串 info3; 私有字符串 info4;

我的用例是排除基于视图的属性(或者说报告 ID)。使用 JSONView 方法,我需要将除 Report2 之外的所有视图添加到 info3 属性以将其排除。不合适。

在这种情况下,正确的方法应该是什么?如果没有类似的东西可用,是否定制 JSONView 以排除/包含将是正确的解决方案。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    似乎没有办法以这种方式从特定视图中排除字段。

    但是,您可以通过使用接口从所需元素组合视图来非常灵活地构建视图。

    在上述情况下,我会试试这个:

    public class ReportViews {
        public interface NeedsInfo3 {};
    
        public static class Report1 implements NeedsInfo3 {};
        public static class Report2 {};
    }
    

    然后在您的模型中使用特定于字段的视图。

    private int id;
    private String name;
    private String info1;
    private String info2;
    
    @JsonView(ReportViews.NeedsInfo3.class)
    private String info3;
    private String info4;
    

    【讨论】:

    • 谢谢,不能直接排除正确,我终于扩展了Jackson 功能以支持我的自定义注释,示例用例之一是:@ReportView(perms={Permission.ShowX,Permission.ShowY,..}, anyPerm=false|true, conditions="reflectiveConditionMethod", include=false|true)
    【解决方案2】:

    Jackson 的 JSON 视图功能基于包含标准,因此您无法更改现有注释。

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      相关资源
      最近更新 更多