为了账号安全,请及时绑定邮箱和手机立即绑定

REST API 响应的属性级别权限

REST API 响应的属性级别权限

缥缈止盈 2021-10-06 12:46:16
如果我有一个表示表的 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 中:....../....../用户/12JSON 响应可能是:{  "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"}
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

一个干净的方法是使用@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 应该使用哪个视图的逻辑


查看完整回答
反对 回复 2021-10-06
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信