JAX-RS(Jersey)创建相关对象而不是null

时间:2012-08-18 06:33:20

标签: java jaxb jersey jax-rs

问题相当简单,但有点难以解释。

我有这样的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
}

1 个答案:

答案 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);