我正在编写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状态代码不能用于此类事情?
我编写了使用REST JAX-RS生成Excel文件的代码,并确认生成的Excel文件位于GlassFish服务器目录中.
但我的目标是当用户点击按钮(生成Excel .xls)时,我想要下载弹出窗口,询问用户是否保存或打开.xls文件,就像任何其他Web服务用于下载任何类型的文件一样.
根据我的搜索,步骤是:
生成Excel .xls(DONE)
将excel写入流
在JAX-RS文件中,将响应头设置为类似的,
String fileName ="Blah_Report.xls"; response.setHeader("Content-Disposition","attachment; filename ="+ fileName);
我的问题是我在JAX-RS文件中做了所有这些,而且我没有可用的HttpServletResponse对象.
根据Add Response Header到JAX-RS Webservice的答案
他说:
您可以通过Web服务中的@Context注释注入对实际HttpServletResponse的引用,并使用addHeader()等来添加标头.
如果没有示例代码,我无法确切地说明这意味着什么.