2015-09-11 62 views
1

我使用Hibernate,除了這種情況,一切都很好。如果我有類和繼承類,那麼當我在Spring Controller中使用JSON發送Object時,總會出現錯誤400 BadRequest。如何在Spring Controller中使用JSON發送繼承的對象?

所有的字段都流通良好,如果我發送的不是子類的對象,一切都很好地存儲。 這是exmp:

@Entity 
@javax.persistence.Table(name="person") 
@Inheritance(strategy=InheritanceType.JOINED) 
public class Person{ 
@Id 
@GeneratedValue 
@Column(name="id_person") 
protected int id_person; 
..... 

@Entity 
@javax.persistence.Table(name="client") 
@PrimaryKeyJoinColumn(name="id_person") 
public class Client extends Person{ 

@Column(name="address") 
protected String address; 
.... 

@Entity 
@javax.persistence.Table(name="individual") 
@PrimaryKeyJoinColumn(name="id_person") 
public class Individual extends Client { 

@Column(name="personal_number") 
protected String personalNumber; 
..... 

我的方法inController:

@RequestMapping(value="/individualPerson", method=RequestMethod.POST) 
public ResponseEntity<List<Individual>> posttest(HttpServletRequest request, HttpServletResponse response, @RequestBody Individual indiv) 

我需要一些額外的註解或設置當我將繼承的對象?

此外,Hibernate會自動創建所有表,並在這些類中註釋一個主鍵。

+0

添加produces屬性設置爲org.springframework.http.MediaType.APPLICATION_JSON有了你可以不知道什麼錯誤HTTP狀態。試試類似[REST-CLINET-UI](http://code.google.com/p/rest-client/)來獲得堆棧跟蹤。 –

+0

我嘗試了一下,對於Rest-ClientUI有一些建議 – zexco2

回答

0

如果使用JSON格式,Jackson library默認情況下不需要任何特殊的註釋。 Spring支持開箱的,所以一般不需要指定任何東西比:

@RequestMapping(value="/individualPerson", method=RequestMethod.POST, produces="application/json") 

另一種選擇是依賴於HTTP內容協商,這是由Spring支持,並且不指定任何格式在produces屬性

0

你會做兩個變化,如果你在你的路徑Jackson庫:

  1. 馬克@ResponseBody標註的方法或返回類型。
  2. @RequestMapping