quarkusio/quarkus · error · java.lang.IllegalStateException
No parameter injector found for parameter %s of route method
Error message
No parameter injector found for parameter %s of route method %s declared on %s
What it means
Raised by ReactiveRoutesProcessor.validateRouteMethod when, while iterating the route method's parameters, no registered ParameterInjector matches a parameter's type and annotations. Reactive Routes only injects parameters it recognizes (RoutingContext, @Param, @Header, body types, etc.); an unmatched parameter would arrive as null at runtime, so the build-time validation fails fast, naming the parameter index, method and declaring bean.
Source
Thrown at extensions/reactive-routes/deployment/src/main/java/io/quarkus/vertx/web/deployment/ReactiveRoutesProcessor.java:563
DotName returnTypeName = method.returnType().name();
if ((returnTypeName.equals(DotNames.UNI)
|| returnTypeName.equals(DotNames.MULTI)
|| returnTypeName.equals(DotNames.COMPLETION_STAGE))
&& method.returnType().kind() == Kind.CLASS) {
throw new IllegalStateException(String.format(
"Route business method returning a Uni/Multi/CompletionStage must declare a type argument on the return type [method: %s, bean: %s]",
method, bean));
}
boolean canEndResponse = false;
int idx = 0;
int failureParams = 0;
for (Type paramType : params) {
Set<AnnotationInstance> paramAnnotations = Annotations.getParameterAnnotations(transformedAnnotations,
method, idx);
List<ParameterInjector> injectors = getMatchingInjectors(paramType, paramAnnotations, index);
if (injectors.isEmpty()) {
throw new IllegalStateException(String.format(
"No parameter injector found for parameter %s of route method %s declared on %s", idx,
method, bean));
}
if (injectors.size() > 1) {
throw new IllegalStateException(String.format(
"Multiple parameter injectors found for parameter %s of route method %s declared on %s",
idx, method, bean));
}
ParameterInjector injector = injectors.get(0);
if (injector.getTargetHandlerType() != null && !injector.getTargetHandlerType().equals(handlerType)) {
throw new IllegalStateException(String.format(
"HandlerType.%s is not legal for parameter %s of route method %s declared on %s",
injector.getTargetHandlerType(), idx, method, bean));
}
// A param injector may validate the parameter annotations
injector.validate(bean, method, routeAnnotation, paramType, paramAnnotations);
View on GitHub (pinned to e1c734241f)
Solutions
- Annotate the parameter with a supported annotation such as @Param or @Header
- Change the parameter type to a supported injectable type like RoutingContext
- Register a custom ParameterInjector extension if a custom parameter type must be supported
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at extensions/reactive-routes/deployment/src/main/java/io/quarkus/vertx/web/deployment/ReactiveRoutesProcessor.java:563 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/81c4735f34e7bb1b.
Report an issue: GitHub.