2015-09-11 32 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