REST API 响应的属性级别权限

如果我有一个表示表的 bean 类,并且它的数据作为 API 的响应返回。该 API 是从具有多个角色和功能的多个客户端调用的,这限制了属性的可见性。我在询问一种动态处理该场景的方法或框架。例如: - 我们有一个用户表:


------------------------------------------------------------------

|  id  |  f_name  |  l_name  | mobile  |  email    | birth_date  |

------------------------------------------------------------------

|  12  |  Ahmed   |  Adel    | 123456  |  a@a.com  | 01/02/90    |

------------------------------------------------------------------

- 我们有一个代表该行的 bean:


class User {

  private int id;

  private String fName;

  private String lName;

  private String mobile;

  private String email;

  private String bDate;

.

.

}

所以在像这样的 API 中:


....../....../用户/12


JSON 响应可能是:


{

  "id": 12,

  "fName": "Ahmed",

  "lName": "Adel",

  "mobile": "123456",

  "email": "a@a.com",

  "bDate": "01/02/90"

}

需要的是,


* 如果客户端是普通用户,那么他应该被迫得到以下响应:


{

  "id": 12,

  "fName": "Ahmed",

  "lName": "Adel",

  "mobile": null,

  "email": null,

  "bDate": null

}

* 如果客户端是更高级别的用户,那么他可以获得更多详细信息,如下所示:


{

  "id": 12,

  "fName": "Ahmed",

  "lName": "Adel",

  "mobile": "123456",

  "email": "a@a.com",

  "bDate": null

}

* 如果客户是管理员,那么他可以获得以下回复的完整详细信息:


{

  "id": 12,

  "fName": "Ahmed",

  "lName": "Adel",

  "mobile": "123456",

  "email": "a@a.com",

  "bDate": "01/02/90"

}


缥缈止盈
浏览 157回答 1
1回答

料青山看我应如是

一个干净的方法是使用@JsonView杰克逊注释。定义视图:public class UserViews {    public static class Normal {}    public static class High extends Normal {}    public static class Admin extends High {}}注释您的模型:class User {    @JsonView(UserViews.Normal.class)    private int id;    @JsonView(UserViews.Normal.class)    private String fName;    @JsonView(UserViews.Normal.class)    private String lName;    @JsonView(UserViews.High.class)    private String mobile;    @JsonView(UserViews.High.class)    private String email;    @JsonView(UserViews.Admin.class)    private String bDate;    // getters and setters}并告诉 jackson 应该使用哪个视图来序列化:mapper.writerWithView(UserViews.Admin.class).writeValueAsString(user);在将数据发送到前端之前,您可以封装和集中 jackson 应该使用哪个视图的逻辑
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java