【发布时间】:2013-04-30 15:27:48
【问题描述】:
我正在构建一个 REST api。我的问题是,在使用 Jersey 时,我的服务构建和返回 Response 对象或返回 bean 或集合之间有什么区别。我只关心成功的调用,我会针对错误和异常情况抛出适当的异常。
这是一个例子:
@Produces(MediaType.APPLICATION_JSON)
public Response search(FooBean foo){
List<FooBean> results = bar.search(foo);
return Response.ok(results).build();
}
对比
@Produces(MediaType.APPLICATION_JSON)
public List<FooBean> search(FooBean foo){
List<FooBean> results = bar.search(foo);
return results;
}
我已经看到使用的两个示例,我更喜欢第二种情况,只是为了更容易识别服务方法。我已经检查了对这两种方法的响应,它们似乎是相同的。
想法?
【问题讨论】:
-
考虑到你没有像你说的那样返回一些
Exception类,它们是相同的。Response提供返回任何类型对象的选项,还设置了HttpStatus。在这种情况下,它将产生200 OK。但是您不能使用Response随意切换到其他状态。当然,这是我的意见,但我喜欢Response方式。 -
您的意思是您可以使用 Response 对象切换到不同的响应状态吗?如果我返回 List
,响应状态也是 200 OK。 -
是的,您可以根据需要切换。默认情况下,如果实体不为空,
Response.ok().entity(entity).build();将返回200 OK,否则将返回204 NO CONTENT。即使实体为空,您也可以强制返回200 OK状态和Response.ok().entity(entity).status(Status.OK).build();; -
我明白了。所以除了偏好之外,返回 bean 和返回 Response builder 之间有什么区别吗?
-
不,如果你在资源类之前捕获异常或在资源类之后拦截,没有区别......
标签: rest jax-rs jakarta-ee