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中不写关联对象

 

posted @ 2020-09-17 19:34  trump2  阅读(336)  评论(0)    收藏  举报