如果我点击显示具有父实体的子实体的所有细节的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;
}
还有其他方法可以解决这个问题吗? 提前致谢。
答案 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;
}
这将限制财产。 谢谢,