RouterFunctions Builders do not support ServerResponse subtypes
org.springframework.web.reactive.function.server.RouterFunctions builder methods use HandlerFunction<ServerResponse> as their input types, rather than something like HandlerFunction<? extends ServerResponse> or equivalent generic signature similar to RouterFunctions::route(RequestPredicate,HandlerFunction).
This makes it infeasible to use other ServerResponse sub types such as EntityResponse or RenderingResponse.
Example code that does not compile
import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.server.RenderingResponse; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.RouterFunctions; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; @Component public class TestRouter { @Bean RouterFunction<? extends ServerResponse> myRoutes() { return RouterFunctions.route() .GET("/example", request -> renderSomething()) .GET("/example2", request -> renderSomething2()) .build(); } Mono<RenderingResponse> renderSomething() { return RenderingResponse.create("example").build(); } Mono<ServerResponse> renderSomething2() { return RenderingResponse.create("example").build().map(ServerResponse.class::cast); } }