如何在RESTful WS中隐藏具有条件的字段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在RESTful WS中隐藏具有条件的字段?相关的知识,希望对你有一定的参考价值。

我有一个名为Report的类,我需要使用RESTful WS共享。

  1. 一旦完全具有其所有属性
  2. 曾经只有一个简化版本

通常我会使用类似@XmlTransient的东西来隐藏字段,但这会阻止完整版本的工作。

有没有办法在输出之前设置条件或类型的预过滤字段,以便它不会影响同一类的其他用途?

我的Report类看起来像这样:

public class Report {
    private String reportId;
    private String title;
    private String content;
    private Date created;
    private Date modified;
...
}

完整报告的RESTful共享如下所示:

@GET
@Path("/{reportId}")
public Report getReport(@PathParam("reportId") String reportId) {
    return Mock.getReport(reportId);
}

我需要的完整输出如下所示:

{
   "reportId": "d83badf3",
   "title": "The tales of lamaru",
   "content": "When once the great Imgur started his journey...",
   "created": 1519672434866,
   "modified": 1519672434866
}

我需要的短输出应该是这样的:

{
   "reportId": "d83badf3",
   "title": "The tales of lamaru"
}

有什么必要来实现这一目标?

答案

你为什么不使用继承?

public class Report {
    private String reportId;
    private String title;
}

儿童

public class FullReport extends Report{
    private String content;
    private Date createdp;
    private Date modified;
}

当你需要完整的报告集返回类型为FullReport否则Report

另一答案

当您想要从JSON序列化和反序列化过程中排除某些类成员时,Jackson有两种不同的注释。这两个注释是@JsonIgnore和@JsonIgnoreProperties。 @JsonIgnoreProperties是类级别的注释,它期望排除的属性将以字符串列表的形式显式指示。 @JsonIgnore是一个成员级或方法级注释,它期望被排除的属性逐个标记。

试试这个。

public class Report {
    private String reportId;
    private String title;
    @JsonIgnore
    private String content;
    @JsonIgnore
    private Date created;
    @JsonIgnore
    private Date modified;
...
}

以上是关于如何在RESTful WS中隐藏具有条件的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 maximo 中隐藏具有类似于银行帐号的特殊字符的字段值

如何在 MongoDB 中有条件地显示/隐藏字段

仅为具有特定 Memberpress 订阅的用户隐藏重力表单字段

基于Spring-WS的Restful API的集成测试

在 Java 中提供 RESTful JSON API

RESTful接口