實體嵌套集合轉Json

今天在做項目的過程中出現的一個問題,在項目中轉換一個List實體集合,此集合中一個屬性爲另外一個實體的Set集合。在轉換的過程中出現了Json轉換死循環的錯誤。

找了一天找到了兩個解決方案!

第一個解決方案:Google Gson

       開始使用的轉換工具不給力,後來在網上找了找,看到Gson之後就做了個例子,發現Gson轉換挺好用的。下面是個小例子

需要引用Gson的jar包(網上搜一下就有很多)

public class User {
	 private int id;  
	    private String name;  
	    public int getId() {  
	        return id;  
	    }  
	    public void setId(int id) {  
	        this.id = id;  
	    }  
	  
	    public String getName() {  
	        return name;  
	    }  
	  
	    public void setName(String name) {  
	        this.name = name;  
	    }  
}

import java.util.HashSet;
import java.util.Set;


public class Student {
	 private int id;  
	    private String name;  
	    private Set<User> users = new HashSet<User>(); //User實體集合
	    private User user;
	    public int getId() {  
	        return id;  
	    }  
	  
	    public void setId(int id) {  
	        this.id = id;  
	    }  
	  
	    public String getName() {  
	        return name;  
	    }  
	  
	    public void setName(String name) {  
	        this.name = name;  
	    }  
	  
		public Set<User> getUsers() {
			return users;
		}

		public void setUsers(Set<User> users) {
			this.users = users;
		}

		public User getUser() {
			return user;
		}

		public void setUser(User user) {
			this.user = user;
		}  
	    
}

import com.google.gson.Gson;
public class test {
	 public static void main(String[] args) {  
		 Gson gson = new Gson();  
		  User user1 = new User();
		  user1.setId(1);
		  user1.setName("xxx");
		  User user2 = new User();
		  user2.setId(2);
		  user2.setName("xxx");
		  Set<User> users = new HashSet<User>();
		  users.add(user1);
		  users.add(user2);
		  
	        Student student1 = new Student();  
	        student1.setId(1);  
	        student1.setName("xxx");  
	        student1.setUsers(users);
	        student1.setUser(user1);
	        Student student2 = new Student();  
	        student2.setId(2);  
	        student2.setName("xxx");  
	        student2.setUsers(users);
	        student2.setUser(user1);
	        
	        List<Student> list = new ArrayList<Student>();  
	        list.add(student1);  
	        list.add(student2);  
	  
	        // 帶泛型的list轉化爲json  
	        String s2 = gson.toJson(list);  
	        System.out.println(s2);  
	 }
}

執行結果:

[{"id":1,"name":"xxx","users":[{"id":2,"name":"xxx"},{"id":1,"name":"xxx"}],"user":{"id":1,"name":"xxx"}},{"id":2,"name":"xxx","users":[{"id":2,"name":"xxx"},{"id":1,"name":"xxx"}],"user":{"id":1,"name":"xxx"}}]


第二個解決方案:@JsonIgnore

       使用此註解,他的作用是在轉換實體的時候忽略掉加有這個註解的屬性。此方案需要引用Gson的jar包。我們項目底層使用的時Hibernate的註解,在轉換Json的過程中需要忽略掉的一些級聯的屬性集合。

import org.codehaus.jackson.annotate.JsonIgnore;
public class Student {
	 private int id;  
	    private String name;  
	    @JsonIgnore
	    private Set<User> users = new HashSet<User>(); //User實體集合
	    private User user;
	    public int getId() {  
	        return id;  
	    }  
	  
	    public void setId(int id) {  
	        this.id = id;  
	    }  
	  
	    public String getName() {  
	        return name;  
	    }  
	  
	    public void setName(String name) {  
	        this.name = name;  
	    }  
	  
		public Set<User> getUsers() {
			return users;
		}

		public void setUsers(Set<User> users) {
			this.users = users;
		}

		public User getUser() {
			return user;
		}

		public void setUser(User user) {
			this.user = user;
		}  
	    
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章