-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Description
Description
When using strict-server: true, x-oapi-codegen-extra-tags on path parameters are not propagated to the generated RequestObject struct fields. This means validation tags (e.g., validate:"required,alphanum") declared on path parameters in the OpenAPI spec have no effect in the generated strict-server code.
Query parameter tags work correctly — they appear on the generated *Params struct fields. This issue is specific to path parameters in strict-server mode.
Steps to Reproduce
Given this OpenAPI spec:
paths:
/node/{hostname}/status:
get:
operationId: GetNodeStatus
parameters:
- name: hostname
in: path
required: true
x-oapi-codegen-extra-tags:
validate: "required,hostname_rfc1123"
schema:
type: stringWith config:
output: gen.go
package: gen
generate:
strict-server: true
models: trueExpected Behavior
The generated GetNodeStatusRequestObject struct should include the validate tag:
type GetNodeStatusRequestObject struct {
Hostname string `validate:"required,hostname_rfc1123"`
}This would allow using a single validation.Struct(request) call in the handler.
Actual Behavior
The generated struct has no extra tags:
type GetNodeStatusRequestObject struct {
Hostname string
}The x-oapi-codegen-extra-tags is silently ignored for path parameters in strict-server mode.
Workaround
Manually validate path parameters in each handler using a temporary struct or direct validation calls:
func (n *Node) GetNodeStatus(
_ context.Context,
request gen.GetNodeStatusRequestObject,
) (gen.GetNodeStatusResponseObject, error) {
if errMsg, ok := validation.Var(request.Hostname, "required,hostname_rfc1123"); !ok {
return gen.GetNodeStatus400JSONResponse{Error: &errMsg}, nil
}
// ...
}Context
This becomes particularly noticeable with resource-oriented APIs where path parameters are common (e.g., /node/{hostname}/network/dns/{interfaceName}). Each handler needs manual validation boilerplate for path params, while query params and request body fields get automatic tag generation.
Version
oapi-codegen v2.4.1