theonedev/onedev · error · NotAcceptableException
Missing query params:
Error message
Missing query params:
What it means
ParamCheckFilter checks that every @QueryParam on the target resource method marked required (primitive type, @NotNull, @NotEmpty, or @Size(min>0)) is present in the request. If a required query parameter is absent, it throws NotAcceptableException (HTTP 406) listing the missing names before the resource method runs.
Source
Thrown at server-core/src/main/java/io/onedev/server/rest/ParamCheckFilter.java:53
for (Parameter param: resourceInfo.getResourceMethod().getParameters()) {
QueryParam queryParam = param.getAnnotation(QueryParam.class);
if (queryParam != null) {
definedQueryParams.add(queryParam.value());
if (isRequired(param))
requiredQueryParams.add(queryParam.value());
}
}
if (resourceInfo.getResourceClass() != TriggerJobResource.class) {
Set<String> suppliedQueryParams = new HashSet<>(uriInfo.getQueryParameters().keySet());
suppliedQueryParams.removeAll(definedQueryParams);
if (!suppliedQueryParams.isEmpty())
throw new NotAcceptableException("Unexpected query params: " + suppliedQueryParams);
}
requiredQueryParams.removeAll(uriInfo.getQueryParameters().keySet());
if (!requiredQueryParams.isEmpty())
throw new NotAcceptableException("Missing query params: " + requiredQueryParams);
}
public static boolean isRequired(Parameter param) {
return param.getType().isPrimitive()
|| param.getAnnotation(NotNull.class) != null
|| param.getAnnotation(NotEmpty.class) != null
|| param.getAnnotation(Size.class)!=null && param.getAnnotation(Size.class).min()>0;
}
}
View on GitHub (pinned to d44925c47c)
Solutions
- Add the missing query parameter(s) named in the message to the request URL
- Provide a valid non-empty value — empty values may still fail validation
- Check the endpoint's resource class/docs for the parameter's expected type and format
- If the param was previously optional, align client with the server version
Example fix
// before GET /api/query/projects // 'query' is @NotEmpty @QueryParam // after GET /api/query/projects?query=state is Open
Defensive patterns
Strategy: validation
Validate before calling
const required = ['query']; // required @QueryParams of the target endpoint
const missing = required.filter(p => !new URL(requestUrl).searchParams.get(p));
if (missing.length) throw new Error(`Missing query params: ${missing}`); Try / catch
try {
const res = await fetch(url);
if (res.status === 406) {
const msg = await res.text();
const missing = msg.match(/Missing query params: \[([^\]]+)\]/)?.[1];
throw new Error(`Add required params: ${missing}`);
}
} catch (e) { /* handle */ } Prevention
- Check the resource method for @NotNull/@NotEmpty/@Size-annotated @QueryParams before calling
- Validate all required params are non-empty before sending
- Keep client code in sync with the OneDev server version in use
When it happens
Trigger: Omitting a query parameter the endpoint declares as required — e.g. calling a search endpoint that declares @QueryParam("query") @NotEmpty String query without ?query=... The filter throws when requiredQueryParams minus supplied params is non-empty.
Common situations: Client written against an older API version where the param was optional; hand-built URLs where the param was never included; client library sending the param only under a flag; Postman/Swagger calls with an empty param field.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Unexpected query params:
- Count should not be greater than ${MAX_PAGE_SIZE}
- File path has to be specified
- build number has to be specified
- Markdown report name has to be specified
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/83c20eb62335b54c.
Report an issue: GitHub.