[Question] Play 2.4 and another Play version in one same project

Hello everyone.

First of all, this is my first post in this forum, bigs thanks for this project.
Here is my question:
We first started with Play 2.4 and liked this framework quite a lot. We have some 350+ handlers in this project, so far so good, we never felt the need for a migration and could answer all of our business needs (until now).

Recently, we are interfacing with another service, written in Spring Boot Webflux framework. (the purpose of this post is not a Play versus Spring, but a real integration question).
As you may know, Spring Boot Webflux offers reactive stack. If we use our traditional Play 2.4 WsClient, we can successfully get our payload from Spring, but in a blocking way.
We then started to break a micro service, with Play 2.7 and pretty much everything latest version. Magic, we can consume Spring in a reactive way!
We even have our Angular front end integrated, we build both frontend and backend in the same project then use play static routes to serve frontend and communicate with backend using the REST interface.
We use Observable on the front end, and quite amazing, we see a full end to end stack, where the webpage stream the results, from a Play 2.7 that is also streaming it results (play.api.http.HttpEntity + play.mvc.Result) over a non blocking HTTP call to a Spring Webflux application feeding Flux. Our business teams really liked that.

Now, here is our question. How can we combine the two? If we brut force copy paste the 2.7 micro service into our 2.4 monolith, as you can imagine, nothing is working, since from the core level, 2.4 is not reactive. Fully breaking a micro service is not quite possible, as Microservice 2.7 have dependencies on the 2.4 monolith. Is there a way to make the two live together inside one same project?
Or maybe a way to have reactivity within the 2.4 monolith?

Thank you for your help.

(the technical part:
Our 2.7 play, which is working and reactive.

    private WSClient ws;

    public CompletionStage<Result> getAllCustomersReactiveWay() {
        String       url    = "http://some-reactive-application:8080/getAllCustomersReactiveWay";
        final String name   = "wsclient";
        ActorSystem  system = ActorSystem.create(name);
        system.registerOnTermination(() -> System.exit(0));
        final ActorMaterializerSettings settings     = ActorMaterializerSettings.create(system);
        final ActorMaterializer         materializer = ActorMaterializer.create(settings, system, name);

        // Create the WS client from the `application.conf` file, the current classloader and materializer.
        StandaloneAhcWSClient client = StandaloneAhcWSClient.create(
                AhcWSClientConfigFactory.forConfig( ConfigFactory.load(), system.getClass().getClassLoader()),
        CompletionStage<? extends StandaloneWSResponse> streamResponse = client.url(url).stream();
        return streamResponse.thenApply(oneStream -> toStreamResult(oneStream));

    private static Result toStreamResult(StandaloneWSResponse response) {
        Source<ByteString, ?> body = response.getBodyAsSource();
        if (response.getStatus() == 200) {
            String contentType = Optional.ofNullable(response.getHeaders().get("Content-Type")).map(contentTypes -> contentTypes.get(0)).orElse("application/octet-stream");
            Optional<String> contentLength = Optional.ofNullable(response.getHeaders().get("Content-Length")).map(contentLengths -> contentLengths.get(0));
            if (contentLength.isPresent()) {
                **return ok().sendEntity(new play.api.http.HttpEntity.Streamed( body, Optional.of(Long.parseLong(contentLength.get())), Optional.of(contentType)));**
            } else {
                return **new Result(new ResponseHeader(200, Collections.emptyMap(), null),**
**                        new HttpEntity.Streamed(body, Optional.empty(), Optional.empty()),**
**                        null,**
**                        null,**
**                        Collections.emptyList()).as(contentType);**
        } else {
            return new Result(Status.BAD_GATEWAY);
    private ReactiveCustomerRepository customerRepository;

    public ResponseEntity<Flux<Customer>> getAllCustomersReactiveWay() {
        Flux<Customer> c = customerRepository.findAll().delayElements(Duration.ofMillis(1000));
        return ResponseEntity.ok(c);

in play 2.4, which is our real project, the text in bold is incompatible.