如何通过spring rest api限制访问子实体和父实体的某些字段

时间:2017-07-25 06:53:32

标签: java mysql hibernate spring-mvc

如果我点击显示具有父实体的子实体的所有细节的API [Mapping may OneToOne或ManyToOne等..]。我得到这样的输出..

{
  "fID": 19,
  **"comments": "good",**
  "recommendation": "rec",
  "candidate": {
    "candidateID": 400,
    "firstName": "Raghu",
    "lastName": "R",
    "emailID": "emial@gmail.com",
    "phoneNumber": "9900000099",
    **"password": "Hello",**
    "gender": "1",
    "candidateDOB": 1472169600000,
    "userId": 22
  },
  "inter": {
    "interID": 14,
    **"name": "Anu",**
    "designation": "Dev"
  },
  "Job": {
    "id": 13,
    "maxYearOfExperience": 9,
    "minYearOfExperience": 3,
    **"organizationName": "EFG"**    
  }
}

我的代码是:

Query query = session.createQuery("from EntityName where ID= :id");
             query.setInteger("id", id);
             result = query.uniqueResult();

我想在上面的输出中隐藏显示字段,粗体字母[** **]。 我尝试了一些方法:

第一种方法是:

EntityName example = new EntityName();              
                Example ex = Example.create(example).excludeProperty("password");               
                Criteria criteria = session.createCriteria(EntityName.class)
                                           .add(Restrictions.eq("id", id))
                                           .add(ex);
                EntityName= (EntityName) criteria.uniqueResult();

但这种做法并不符合我的要求。

第二种方法是:

Criteria criteria = session.createCriteria(EntityName.class)
                                          .add(Restrictions.eq("id", id));
                ProjectionList projList = Projections.projectionList();
                projList.add(Projections.property("id"));
                projList.add(Projections.property("Name"));
                projList.add(Projections.property("authPerson"));
              projList.add....so on
                criteria.setProjection(projList);

                Object obj =  criteria.uniqueResult();
                if(obj != null){
                EntityName= (EntityName) obj;               
                }

还有其他方法可以解决这个问题吗? 提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以使用父实体中的@JsonIgnore和@JsonProperty注释来执行此操作。你究竟是如何做到这将取决于你正在使用的杰克逊版本。看看这个答案你的选择:

Only using @JsonIgnore during serialization, but not deserialization

答案 1 :(得分:0)

我得到了答案:

More fields....

    @JsonIgnore
    private String password;

    @JsonIgnore
    public String getPassword() {
        return password;
    }

    @JsonProperty
    public void setPassword(String password) {
        this.password = password;
    }

这将限制财产。 谢谢,