You*_*mil 6 java rest jetty jersey embedded-jetty
我定义了我的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;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但有人告诉我宁愿返回一个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();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:当你可以返回一个String时,是否有必要将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();
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,它可以让你控制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");
Run Code Online (Sandbox Code Playgroud)
另外发送一个文件要容易得多:
File fileToSend = getFile();
return Response.ok(fileToSend, "application/zip").build();
Run Code Online (Sandbox Code Playgroud)
所以有很多原因,如果你不想做任何特别的事情,那么如果你想修改HTTP响应属性,只需返回对象就足够了,那么你必须使用Response.
没有必要。
但许多人更喜欢始终返回 Response 对象,因为您经常需要控制响应标头(超出注释中设置的标头)和响应的其他方面,例如状态代码。因此,如果您有时返回一个字符串,有时返回一个响应,它看起来会非常不一致。始终如一地这样做会创建一个清晰且易于遵循的模式。
如果您的应用程序确实很琐碎,那么这并不重要;否则,你正在考虑的事实表明风格很重要。
| 归档时间: |
|
| 查看次数: |
7089 次 |
| 最近记录: |