我定义了我的REST方法以返回String数据类型作为对http请求的响应。就是这个:
@Path("/users/{name}/")
@GET
@Produces("application/json")
public String getAllUserMemberships(@PathParam("name") String name) throws Exception{
String doc = "{\"name\":\""+name+"\",\"message\":\"Logged in\"}";
return doc;
}
它工作正常,但是有人告诉我要返回一个javax.ws.rs.core.Response
对象,如下面的示例代码所示。这也可以正常工作,他说这是响应HTTP请求的最佳方法,但是他不知道为什么。
@Path("/users/{name}/")
@GET
@Produces("application/json")
public Response getAllUserMemberships(@PathParam("name") String name) throws Exception{
String doc = "{\"name\":\""+name+"\",\"message\":\"Logged in\"}";
return Response.ok(doc, MediaType.APPLICATION_JSON).build();
}
我的问题是:仅返回字符串时,是否有必要将Response对象返回到HTTP请求。如果有必要,请告诉我为什么,因为对于HTTP请求的目的,哪一个是正确的感到困惑。我还担心Response对象可能会给我一些我无法处理的问题。
如果返回简单的String,则无法控制发生错误的情况。但是,如果您返回Response对象,则可以返回一条带有错误消息的适当的500错误:
try {
return Response.ok(successResult).build();
} catch(Exception ex) {
return Response.serverError().entity(fault).build();
//or
return Response.status(500).entity(fault).build();
}
正如其他人所说,它使您可以控制HTTP响应的其他方面,例如设置一些有用的标头:
Response response = Response.ok(successResult);
response.getHeaders().put("Access-Control-Allow-Origin", "*");
response.getHeaders().put("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization");
response.getHeaders().put("Access-Control-Allow-Credentials", "true");
response.getHeaders().put("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD");
发送文件也很容易:
File fileToSend = getFile();
return Response.ok(fileToSend, "application/zip").build();
因此,有很多原因,如果不想做任何特殊的事情,那么如果您确实想修改HTTP响应属性,只需返回对象就可以了,那么您必须使用Response。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句