我正在编写REST Web应用程序(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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我也想用JSON数据一起返回的HTTP状态代码(500,200,204,等).
我试着用HttpServletResponse:
response.sendError("error message", 500);
Run Code Online (Sandbox Code Playgroud)
但这使得浏览器认为它是"真正的"500,因此输出网页是一个常规的HTTP 500错误页面.
我想返回一个HTTP状态代码,以便我的客户端JavaScript可以根据它处理一些逻辑(例如在HTML页面上显示错误代码和消息).这是可能的还是HTTP状态代码不能用于此类事情?
我正在使用Jersey学习JAX-RS(又名JSR-311).我已经成功创建了一个Root资源并正在使用参数:
@Path("/hello")
public class HelloWorldResource {
@GET
@Produces("text/html")
public String get(
@QueryParam("name") String name,
@QueryParam("birthDate") Date birthDate) {
// Return a greeting with the name and age
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,并处理当前语言环境中的任何格式,日期(字符串)构造函数(如YYYY/mm/dd和mm/dd/YYYY)可以理解这种格式.但是,如果我提供的值无效或无法理解,我会得到404响应.
例如:
GET /hello?name=Mark&birthDate=X
404 Not Found
Run Code Online (Sandbox Code Playgroud)
我该如何自定义此行为?也许是一个不同的响应代码(可能是"400 Bad Request")?记录错误怎么样?也许在自定义标题中添加问题描述("错误日期格式")以帮助排除故障?或者返回包含详细信息的完整错误响应以及5xx状态代码?