问题很简单,但有点难以解释。
我有这样的 REST 服务:
@Path("categories")
@RequestScoped
public class CategoryResource {
@Inject
CategoriesFacade dao;
@PUT
@Consumes("application/json")
public void putJson(Categories content) {
System.err.println(content.toString()); // <-- ?????
dao.edit(content);
}
// ....
}
和这样的实体对象:
@XmlRootElement
public class Categories implements Serializable {
@Id
@Column(name = "CATEGORY_ID", unique = true, nullable = false, precision = 5)
private Integer categoryId;
@Column(name = "NAME")
private String name;
@JoinColumn(name = "PARENT_ID", referencedColumnName = "CATEGORY_ID")
@ManyToOne
private Categories parentId;
// ....
}
这是http请求有效负载:
PUT http://localhost:8080/api/categories
Data: {"categoryId":"7162","name":"test","parentId":null}
这是我在@PUT
请求中获得的类别对象(参见标有 ???? 的行):
Categories{
categoryId=7162,
name=test,
parentId=Categories{categoryId=null, name=null, parentId=null}
}
因此,正如您在此处看到的,parentId
分配了空Categories
对象,这样我得到了 ValidationException,因为name
不能为空。
知道如何让 Jersey 给我这种对象,所以 parentId 的 null 值就可以了:
Categories{
categoryId=7162,
name=test,
parentId=null
}