我有一个复杂的类,里面有很多对象,当我做GET时,我想看到包含所有内部对象数据的完整对象,但是当我发布POST时,我只想为内部对象传递ID。
示例:
class ComplexObject {
private InnerObject1 innerObject1;
private InnerObject2 innerObject2;
//setters and getters
}
当我执行GET时,我想要检索完整的JSON,这是最简单的部分,但是当我保存ComplexObject时,我想只传递innerObject1和innerObject2的id,而不是整个对象。
我怎样才能做到这一点?
答案 0 :(得分:1)
您不应该使用Hibernate实体在REST调用中发送和接收数据。为此使用单独的对象 - 数据传输对象(DTO) - What is Data Transfer Object?。在您的情况下,它可能是ComplexObjectWithIds
,其中只包含ID:
@POST
@Path("/complex-object")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response postComplexObject(ComplexObjectWithIds complexObjectWithIds)
ComplextObjectFull
包含完整数据:
@GET
@Path("/complex-object")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public ComplextObjectFull getComplexObject()
答案 1 :(得分:0)
发布对象时,您可以解析发送的JSON,并通过控制器中的ID检索所需的对象,然后在那里重建对象并发送要创建的完整对象。
例如,假设您有一个 ObjectController ,并且在发布路线上您将构建一个复杂的JSON。
//Post request to this method
public void addObject(@RequestBody Object obj) {
Object newObj = new Object(obj);
//Get the full objects by id
InnerObject innerObj = innerObjectService.findById(obj.innerObjectId);
//Build the full new object
newObj.setInnerObj(innerObj);
//Create the object
...
}