大家好,我最近使用Spring boot做REST API遇到個問題
在使用Spring的RestController讓method直接return一個物件
Spring會自動把物件轉為JSON String送給client
但我的JPA物件因為有關連的關係
Class A會指向Class B,Class B也會只回Class A
所以物件被展開成JSON String時就沒完沒了直到Exception了..
使用套件:
spring-boot-starter-web
spring-boot-starter-data-jpa
spring-boot-devtools
我用個範例來描述我的問題
@Entity
public class Type{
@id
private String name;
@OneToMany(mappedBy="type")
private List<Content> contents;
// getter and setter
}
@Entity
public class Content{
@Id
private String name;
@ManyToOne
private Type type;
// getter and setter
}
@RestController
public class Controller{
// @Autowired something...
@GetMapping("/show-types")
public Interable<Type> showTypes(){
return typeDao.findAll();
}
}
基本上就是Type裡面紀錄的很多Content
但為了存到資料庫裡有關聯,Content也可以指回去自己屬於哪個Type
所以透過網址呼叫/show-types時
Spring展開了Type發現有Content,就展開了Content
展開Content時又發現有Type,所以又展開了Type...
一直持續下去,然後就當了XD
想請問有什麼辦法讓Spring展開到Content後就忽略裡面的type field
或是有其他方法能解決掉這個無限遞迴的問題?
謝謝!