我正在构建REST API。我的问题是,在使用Jersey时,我的服务构建和返回Response对象或返回bean或集合之间有什么区别。我只关心成功的电话,我正在抛出错误和特殊情况的适当例外。在JAX RS中,返回Response和Bean或Bean的集合(DTO)之间的区别
这里有一个例子:
@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'方式。 – 2013-04-30 17:03:17
您的意思是您可以使用Response对象切换到不同的响应状态? 如果我返回列表,响应状态也是200 OK。 –
2013-04-30 17:44:12
是的,你可以切换,如果你想。默认情况下'Response.ok()。entity(entity).build();'如果实体不为空则返回'200 OK',否则返回'204 NO CONTENT'。你可以用'Response.ok()。entity(entity).status(Status.OK).build();'强制返回'200 OK'状态,即使实体为空; – 2013-04-30 19:45:46