使用JAX-RS创建方法响应的RESTful服务

时间:2014-08-14 15:05:13

标签: web-services rest java-ee netbeans jax-rs

我正在使用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这是有充分理由的吗?

2 个答案:

答案 0 :(得分:1)

您应该返回一个响应对象,例如

URI uri = uriInfo.getBaseUriBuilder().build(entity.getId());
return Response.created(uri).build();

答案 1 :(得分:1)

如果要返回201,为什么不在create()方法周围添加抽象?在其间添加一个新图层,并从该图层/类返回201。