jpa返回json信息定制
1.为了json只返回指定的字段,其他不需要的信息不返回,定义一个指明字段的返回类, 返回通过spring提供的beanUtil.copyProperties进行复制,为了方便list复杂,定义一个工具类
public class CopyUtil extends BeanUtils {
/**
* 集合数据的拷贝
* @param sources: 数据源类
* @param target: 目标类::new(eg: UserVO::new)
* @return
*/
public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {
List<T> list = new ArrayList<>(sources.size());
for (S source : sources) {
T t = target.get();
copyProperties(source, t);
list.add(t);
}
return list;
}
}
2.调用:
List<Article> articles = articleService.getArticles(start,limit).getContent(); List<ArticleSerializer> ass = CopyUtil.copyListProperties(articles, ArticleSerializer::new);
3.避免hibernateProxySerializer等无用信息返回json
让modle继承一个自定义的BaseModel,类上注解:@JsonIgnoreProperties(ignoreUnknown = true, value = {"hibernateLazyInitializer", "handler", "fieldHandler"})
4.如果只想获取一级关联对象,而孙子关联对象不要---->需要在对于的XxxSerializer的关联对象的set方法中使用BeanUtils.copyProperties(xxx, yyy);
public class AuthUserSerializer implements Serializable{
private static final long serialVersionUID = -2363448426187456027L;
private Integer id;
private String username;
private String realName;
private String nickName;
private Integer status;
private String authIp;
private String sessionKey;
private Date createTime;
public List<RoleSerializer> getRoles() {
return roles;
}
public void setRoles(List<RoleSerializer> roles) { // 注意传过来的roles是一个hibernateProxy对象
// this.roles = roles;
this.roles = CopyUtil.copyListProperties(roles, RoleSerializer::new);
}
private List<RoleSerializer> roles;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getAuthIp() {
return authIp;
}
public void setAuthIp(String authIp) {
this.authIp = authIp;
}
public String getSessionKey() {
return sessionKey;
}
public void setSessionKey(String sessionKey) {
this.sessionKey = sessionKey;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
RoleSerializer.java中不写关联对象
无聊我就学英语

浙公网安备 33010602011771号