Is your feature request related to a problem? Please describe. In the current implementation, it's necessary to change a bunch of method signatures when we introduce new HTTP parameters and pass them to downstream methods.

Let's say you introduce the new parameter forceRefresh like #2402. In this case, you need to change the signature of EnvironmentRepository and SearchPathLocator and modify a lot of classes that implement those interfaces.

Before introducing forceRefresh

public interface EnvironmentRepository {
    Environment findOne(String application, String profile, String label);
        Environment findOne(String application, String profile, String label, boolean includeOrigin);
}

public interface SearchPathLocator {
    Locations getLocations(String application, String profile, String label);
}

After introducing forceRefresh

public interface EnvironmentRepository {
    Environment findOne(String application, String profile, String label);
        Environment findOne(String application, String profile, String label, boolean includeOrigin);
        Environment findOne(String application, String profile, String label, boolean includeOrigin, boolean forceRefresh);
}

public interface SearchPathLocator {
    Locations getLocations(String application, String profile, String label);
        Locations getLocations(String application, String profile, String label, boolean forceRefresh);
}

Describe the solution you'd like Introduce RequestContext and change the interface of EnvironmentRepository and SearchPathLocator like below.

public interface EnvironmentRepository {
    Environment findOne(RequestContext ctx);
}

public interface SearchPathLocator {
    Locations getLocations(RequestContext ctx);
}

When you introduce new HTTP parameters, you can just change RequestContext and don't need to change a bunch of method signatures like the current implementation.