我正在写一个REST网络应用(NetBeans 6.9, JAX-RS, TopLink Essentials),并试图返回JSON ***和HTTP状态代码。我已经准备好了代码,可以在客户端调用HTTP GET方法时返回JSON。本质上。
@Path("get/id")
@GET
@Produces("application/json")
public M_機械 getMachineToUpdate(@PathParam("id") String id) {
// some code to return JSON ...
return myJson;
}
但我*也想在返回JSON数据的同时返回一个HTTP状态代码(500、200、204等)。
我试图使用HttpServletResponse
。
response.sendError("error message", 500);
但这让浏览器认为这是一个"真正的"500,所以输出的网页是一个普通的HTTP 500错误页面。
我想返回一个HTTP状态代码,这样我的客户端JavaScript就可以根据它来处理一些逻辑(例如在HTML页面上显示错误代码和信息)。这可能吗?或者HTTP状态码不应该被用于这种事情?
这里有一个例子。
@GET
@Path("retrieve/{uuid}")
public Response retrieveSomething(@PathParam("uuid") String uuid) {
if(uuid == null || uuid.trim().length() == 0) {
return Response.serverError().entity("UUID cannot be blank").build();
}
Entity entity = service.getById(uuid);
if(entity == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Entity not found for UUID: " + uuid).build();
}
String json = //convert entity to json
return Response.ok(json, MediaType.APPLICATION_JSON).build();
}
看一下Response类。
注意,你应该总是指定一个内容类型,特别是当你传递多种内容类型时,但如果每条消息都将以JSON表示,你可以只用@Produces("application/json")
来注释这个方法。
JAX-RS 支持标准/自定义 HTTP 代码。 例如,请参见 ResponseBuilder 和 ResponseStatus。
请记住,JSON信息更多的是关于与资源/应用相关的数据。 HTTP代码更多的是关于被请求的CRUD操作的状态。 (至少在REST系统中应该是这样的)