Jersey JAX-RS загрузка файла с сервера

Чтобы указать JAX-RS, что вызов данного метода приводит к загрузке файла, необходимо аннотировать метод 

@Produces("content/type")
@Produces("content/type") , например 
@Produces("text/plain")
@Produces("text/plain") для случая с текстовым файлов. Также необходимо указать
Content-Disposition
Content-Disposition в ответе сервера.

Код примера:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package ru.mydesignstudio.rest;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@Path("/hello")
public class RestService {
@GET
@Path("/file")
@Produces("text/plain")
public Response getFile() throws IOException {
File file = new File("test.txt");
try (BufferedWriter writer = new BufferedWriter(
new FileWriter(file))) {
writer.write("Hello from JAX-RS REST Service!");
writer.flush();
writer.close();
}
return Response.ok().
entity(file).
header("Content-disposition", "attachment; filename=\"test-file.txt\"")
.build();
}
}
package ru.mydesignstudio.rest; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; @Path("/hello") public class RestService { @GET @Path("/file") @Produces("text/plain") public Response getFile() throws IOException { File file = new File("test.txt"); try (BufferedWriter writer = new BufferedWriter( new FileWriter(file))) { writer.write("Hello from JAX-RS REST Service!"); writer.flush(); writer.close(); } return Response.ok(). entity(file). header("Content-disposition", "attachment; filename=\"test-file.txt\"") .build(); } }
package ru.mydesignstudio.rest;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

@Path("/hello")
public class RestService {   
  
  @GET
  @Path("/file")
  @Produces("text/plain")
  public Response getFile() throws IOException {
    File file = new File("test.txt");
    
    try (BufferedWriter writer = new BufferedWriter(
        new FileWriter(file))) {
    
      writer.write("Hello from JAX-RS REST Service!");
      writer.flush();
      writer.close();
    }
    
    return Response.ok().
        entity(file).
        header("Content-disposition", "attachment; filename=\"test-file.txt\"")
        .build();
  }
}

Результат:

JAX-RS загрузка файла
JAX-RS загрузка файла