我的spring-data-rest集成测试因为一个简单的json请求而失败了。考虑以下jpa模型:
Order.java
public class Order {
@Id @GeneratedValue//
private Long id;
@ManyToOne(fetch = FetchType.LAZY)//
private Person creator;
private String type;
public Order(Person creator) {
this.creator = creator;
}
// getters and setters
}
Person.java
ic class Person {
@Id @GeneratedValue private Long id;
@Description("A person's first name") //
private String firstName;
@Description("A person's last name") //
private String lastName;
@Description("A person's siblings") //
@ManyToMany //
private List<Person> siblings = new ArrayList<Person>();
@ManyToOne //
private Person father;
@Description("Timestamp this person object was created") //
private Date created;
@JsonIgnore //
private int age;
private int height, weight;
private Gender gender;
// ... getters and setters
}
在我的测试中,我使用personRepository创建了一个人,并通过传递该人来初始化订单。
Person creator = new Person();
creator.setFirstName("Joe");
creator.setLastName("Keith");
created.setCreated(new Date());
created.setAge("30");
creator = personRepository.save(creator);
Order order = new Order(creator);
String orderJson = new ObjectMapper().writeValueAsString(order);
mockMvc.perform(post("/orders").content(orderJson).andDoPrint());
订单已创建,但创建者未与订单关联。另外,我想将请求主体传递为JSON对象。在此中,我的JSON对象应包含以下内容作为创建者。
{
"type": "1",
"creator": {
"id": 1,
"firstName": "Joe",
"lastName": "Keith",
"age": 30
}
}
如果我使用以下JSON格式的请求体发送请求,调用将会正常工作
{
"type": "1",
"creator": "http://localhost/people/1"
}
但是我不想发送第二个json。有什么办法解决这个问题?因为我的客户端已经通过发送第一个json来使用服务器响应。现在我将服务器迁移到使用spring-data-rest。之后,所有我的客户端代码都无法工作。
如何解决这个问题?