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

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

Код примера:

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 загрузка файла