Skip to content

Raising exception when loading schema with a JSON parameter (i.e. with schema under parameters[0][:content]["application/json"][:schema]) #476

@Drowze

Description

@Drowze

OpenAPI 3.0+ supports nesting parameters schema under a content property - that allows for defining json-formatted parameter schemas. See:

We're getting errors though when attempting to load a parameter defined that way.

Reproducing:

# schema.yaml
---
openapi: 3.0.3
info:
  title: Test API
  version: '1.0'
servers:
- url: http://localhost:3000
paths:
  /users/search:
    get:
      parameters:
        - name: filters
          in: query
          content:
            application/json:
              schema:
                type: object
                properties:
                  from_date:
                    type: string
                  to_date:
                    type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  created_at:
                    type: string
$ ruby -r'openapi_first' -e 'OpenapiFirst.load("schema.yaml")'
/Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:113:in 'block in OpenapiFirst::Builder#resolve_parameters': undefined method 'resolved' for nil (NoMethodError)

        result['schema'] = parameter['schema'].resolved
                                              ^^^^^^^^^
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:111:in 'Array#map'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:111:in 'OpenapiFirst::Builder#resolve_parameters'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:99:in 'OpenapiFirst::Builder#parse_parameters'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:70:in 'block (2 levels) in OpenapiFirst::Builder#router'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:67:in 'Array#map'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:67:in 'block in OpenapiFirst::Builder#router'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/ref_resolver.rb:141:in 'block in OpenapiFirst::RefResolver::Hash#each'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/ref_resolver.rb:140:in 'Hash#each_key'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/ref_resolver.rb:140:in 'OpenapiFirst::RefResolver::Hash#each'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:65:in 'OpenapiFirst::Builder#router'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/builder.rb:23:in 'OpenapiFirst::Builder.build_router'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first/definition.rb:32:in 'OpenapiFirst::Definition#initialize'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first.rb:79:in 'Class#new'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first.rb:79:in 'OpenapiFirst.parse'
	from /Users/Drowze/.gems/4.0.0/gems/openapi_first-3.3.1/lib/openapi_first.rb:70:in 'OpenapiFirst.load'

My environment:

Ruby version: ruby 4.0.2 (2026-03-17 revision d3da9fec82) +PRISM [arm64-darwin25]
openapi_first version: 3.3.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions