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

问题描述 投票:0回答:2

我有一个名为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"
}

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

java rest web-services get jax-rs
2个回答
1
投票

你为什么不使用继承?

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


1
投票

当您想要从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;
...
}
© www.soinside.com 2019 - 2024. All rights reserved.