ho fatto queste modifiche, e pare funzionare tutto (poi dal punto di vista design non so).
nell'enum imposto anche l'estensione del file da scaricare (in futuro magari aggiungo altre estensioni), e il tipo di operazione (r=lettura, quindi visualizzazione, r=scrittura quindi mi fa il download):
	codice:
	public enum MediaTypeAccepted {
    JSON("application/json", "", "r"),
    XLS("application/vnd.ms-excel", "xls", "w");
    private String value;
    private String ext;
    private String operation;
    MediaTypeAccepted(String value, String ext, String operation) {
        this.value = value;
        this.ext = ext;
        this.operation = operation;
    }
    public String getValue() {
        return value;
    }
    public String getExt() {
        return ext;
    }
    public String getOperation() {
        return operation;
    }
}
 
poi ho creato una classe che mi crea la Response.ResponseBuilder:
	codice:
	public class CreateResponse {
    private Object entity;
    private String mediaType;
    private String ext;
    private String operation;
    public CreateResponse(Object entity, String mediaType, String ext, String operation) {
        this.entity = entity;
        this.mediaType = mediaType;
        this.ext = ext;
        this.operation = operation;
    }
    public Response.ResponseBuilder create() throws IOException {
        Response.ResponseBuilder response = null;
        if (operation.equals("w")) {
            File file = File.createTempFile("export", "." + ext);
            response = Response.ok((Object) file, mediaType);
            response.header("Content-Disposition", "attachment; filename=" + file);
            file.deleteOnExit();
        } else {
            response = Response.ok(entity, mediaType);
        }
        return response;
    }
}
 
a seconda del tipo di operazione creo il file o meno (ovviamente la creazione prendendo i dati devo ancora impostarla).
infine nel service:
	codice:
	@Path("test")
public class TestService {
    @GET
    @Path("{mediaType}")
    public Response test(@PathParam("mediaType") String mediaType) {
        CreateResponse response;
        Response.ResponseBuilder rb;
        if (EnumUtils.isValidEnum(MediaTypeAccepted.class, mediaType.toUpperCase())) {
            ZonaQueries query = new ZonaQueries();
            ArrayList<Zona> list = null;
            String mt = MediaTypeAccepted.valueOf(mediaType.toUpperCase()).getValue();
            String ext = MediaTypeAccepted.valueOf(mediaType.toUpperCase()).getExt();
            String operation = MediaTypeAccepted.valueOf(mediaType.toUpperCase()).getOperation();
            try {
                list = query.getAll();
                response = new CreateResponse(list, mt, ext, operation);
                rb = response.create();
            } catch (ClassNotFoundException | SQLException | IOException ex) {
                throw new NotFoundException(new JsonError("Errore", ex.getMessage()));
            }
        } else {
            throw new NotFoundException(new JsonError("Errore", "File non supportato"));
        }
        return rb.build();
    }
}
 
funzionare funziona.....