问题相当简单,但有点难以解释。
我有这样的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
不能为空。
任何想法如何让泽西岛给我这种对象,所以parentId的空值就没问题了:
Categories{
categoryId=7162,
name=test,
parentId=null
}
答案 0 :(得分:0)
在客户端站点上对对象进行字符串化(例如,如果是JavaScropt上的客户端,则使用方法JSON.stringify
)。
休息方法制作
@PUT
@Consumes("application/json")
public void putJson(String content) {
将json字符串转换为对象(例如,使用google json)
Categories cont = new com.google.gson.Gson().fromJson(content, Categories.class);