[問題] Spring展開JPA物件成JSON的問題

看板java作者 (資工人)時間7年前 (2017/01/16 23:28), 編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
大家好,我最近使用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 或是有其他方法能解決掉這個無限遞迴的問題? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.178.168 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1484580523.A.D96.html

01/16 23:46, , 1F
jackson @JsonIdentityInfo
01/16 23:46, 1F

01/16 23:49, , 2F
jackson @JsonIgnore
01/16 23:49, 2F

01/17 00:49, , 3F
感謝!!用第二個方法直接加在field name上就成功了!!
01/17 00:49, 3F

01/21 09:10, , 4F
以前也踫過類似問題(是XML/JAXB 而不是JSON罷了)用
01/21 09:10, 4F

01/21 09:10, , 5F
過類似上面的方法。最後還是放棄(不想把entity被pres
01/21 09:10, 5F

01/21 09:10, , 6F
entation相關的東西污染)。改為把entity 先轉成value
01/21 09:10, 6F

01/21 09:10, , 7F
object(進來的則是value object 轉entity),雖然多
01/21 09:10, 7F

01/21 09:10, , 8F
了classes不過整體乾淨很多
01/21 09:10, 8F

01/25 17:07, , 9F
我的建議是entity就讓他活在jvm裡吧
01/25 17:07, 9F

01/25 17:07, , 10F
要往外丟請重新設計vo
01/25 17:07, 10F
文章代碼(AID): #1OVEQhsM (java)