相关疑难解决方法(0)

JAX-RS - 如何将JSON和HTTP状态代码一起返回?

我正在编写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状态代码不能用于此类事情?

java rest jax-rs http-status-codes

237
推荐指数
8
解决办法
45万
查看次数

将响应标头添加到JAX-RS Webservice

我正在尝试为我的一些webservice调用添加一些响应标头.我使用CXF 2.1.2和JAX-RS编写了我的Web服务.我需要返回一个对象,我还想在Response中添加一些标题. 如果不返回javax.ws.rs.core.Response对象,如何在响应中添加标头并仍然返回我的javabean?

java web-services cxf jax-rs httpresponse

15
推荐指数
1
解决办法
8724
查看次数

如何指示从Jersey中的REST服务保存到浏览器的文件名?

我正在尝试让REST服务从本地硬盘返回一个zip文件.以下就是我在做什么

@Path("/interface3/{Ent_id}/{esf_app_id}/{esf_app_ver}")
public class Interface3Mock {

    // This method is called if TEXT_PLAIN is request
    @GET
    @Produces("application/zip")
    public Response  callInterface3_text(
            @PathParam("Ent_id") Integer entitlement_id,
            @PathParam("eapp_id") String eapp_id,
            @PathParam("eapp_ver") String eapp_ver) {
        File f = new File("D:\\Documentation\\Documentation.zip");

        String mt = new MimetypesFileTypeMap().getContentType(f);

        return Response.ok(f, mt).build();

    }
}
Run Code Online (Sandbox Code Playgroud)

现在当我使用浏览器即.Internet Explorer和URL中的键http://localhost:9788/mockRESTServer/rest/interface3/123456/k123/l345 我看到一个文件下载对话框,上面写着"你想保存文件l345`.

我想让它问我的zip下载即.D:\\Documentation\\Documentation.zip.但不知何故,它占用了请求URL中的最后一个参数.

java rest jax-rs jersey

6
推荐指数
1
解决办法
5742
查看次数

通过Rest下载CSV文件

使用OpenCSV,我可以在光盘上成功创建一个CSV文件,但我真正需要的是允许用户使用下载按钮下载CSV,我不需要保存在磁盘上,只需下载即可.有任何想法吗?

@GET
@Path("/downloadCsv")
public Object downloadCsv() {
        CSVWriter writer;
        FileWriter wr; 
      //Or should I use outputstream here?   
        wr= new FileWriter("MyFile.csv");
        writer = new CSVWriter(wr,',');
        for (Asset elem: assets) {
            writer.writeNext(elem.toStringArray());
        }
        writer.close();


}
Run Code Online (Sandbox Code Playgroud)

编辑:我不想在光盘上保存/读取文件EVER

java csv rest opencsv

5
推荐指数
1
解决办法
4万
查看次数

在实现中设置JAX-RS响应标头,而无需在接口中暴露HttpServletResponse

我有一个RESTful服务器实现以及一个供客户端进行调用的库,所有这些都使用JAX-RS。服务器组件分为接口FooResource和实现FooResourceService

为了使客户端和服务器库共享RESTful路径和其他定义,我想将FooResource接口拆分为自己的项目:

@Path(value = "foo")
public interface FooResource {

  @GET
  public Bar getBar(@PathParam(value = "{id}") int id) {
Run Code Online (Sandbox Code Playgroud)

我想在响应中设置一些标题。一种简单的方法是@Context HttpServletResponse在方法签名中使用:

  public Bar getBar(@PathParam(value = "{id}") int id, @Context HttpServletResponse servletResponse) {
Run Code Online (Sandbox Code Playgroud)

但是问题在于这暴露了接口中的实现细节。更具体地说,它突然需要我的REST定义项目(在客户端和服务器库之间共享)来引入javax.servlet-api依赖项-客户端不需要(或不需要)某些东西。

我的RESTful资源服务实现如何设置HTTP响应标头而不在资源接口中引入依赖关系?

我看到一篇推荐我将HttpServletResponse作为类成员注入的帖子。但是,如果我的资源服务实现是单例的,这将如何工作?它是否使用某种具有线程局部变量的代理,或者即使多个线程同时使用singleton类,也能找出正确的servlet响应的代理?还有其他解决方案吗?

java rest jax-rs httpresponse

4
推荐指数
1
解决办法
6150
查看次数