我正在使用Java EE Jax-RS开发RESTful服务。我得到了使用Netbeans设计的基本代码。
AbstractFacade中create
方法的返回类型,我的所有资源外观都是继承的。
public void create(T entity) {
getEntityManager().persist(entity);
}
这是我的ComplainFacadeREST
@POST
@Consumes({"application/xml", "application/json"})
public void create( Complain entity ) {
super.create(entity);
}
因此,一旦创建资源,它就不会发送任何有用的响应。相反,我得到204 No Content
回复。但这不是它应该如何发生的,对吧?
如果在源服务器上创建了资源,则响应应该是201(已创建)并包含描述请求状态的实体,并引用新资源和Location头
我现在该怎么办?没有响应似乎是一个问题,我必须将用户重定向到我的AngularJS UI中的#/resource/:id
。为此,我必须发送新创建的资源的id或发送正确的Location头。我可以改变AbstractFacade吗?或者还有其他方法吗?还是我错过了什么?在Netbeans中创建AbstractFacade
的人已将create
方法标记为void
这是有充分理由的吗?
答案 0 :(得分:1)
您应该返回一个响应对象,例如
URI uri = uriInfo.getBaseUriBuilder().build(entity.getId());
return Response.created(uri).build();
答案 1 :(得分:1)
如果要返回201,为什么不在create()
方法周围添加抽象?在其间添加一个新图层,并从该图层/类返回201。