diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b2daac9..17d7e3c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -25,7 +25,7 @@ jobs:
         with:
           version: ${{ matrix.version }}
           arch: ${{ matrix.arch }}
-      - uses: actions/cache@v1
+      - uses: actions/cache@v4
         env:
           cache-name: cache-artifacts
         with:
diff --git a/Project.toml b/Project.toml
index b2c5f7a..94ae989 100644
--- a/Project.toml
+++ b/Project.toml
@@ -4,7 +4,7 @@ keywords = ["Swagger", "OpenAPI", "REST"]
 license = "MIT"
 desc = "OpenAPI server and client helper for Julia"
 authors = ["JuliaHub Inc."]
-version = "0.1.27"
+version = "0.2.0"
 
 [deps]
 Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
@@ -24,7 +24,7 @@ Downloads = "1"
 HTTP = "1"
 JSON = "0.20, 0.21"
 LibCURL = "0.6"
-MIMEs = "0.1"
+MIMEs = "0.1, 1"
 MbedTLS = "0.6.8, 0.7, 1"
 TimeZones = "1"
 URIs = "1.3"
diff --git a/src/val.jl b/src/val.jl
index 21f393b..c6cd73a 100644
--- a/src/val.jl
+++ b/src/val.jl
@@ -84,3 +84,5 @@ function validate_param(parameter, operation_or_model, rule, value, args...)
 end
 
 validate_property(::Type{T}, name::Symbol, val) where {T<:APIModel} = nothing
+validate_properties(::T) where {T<:APIModel} = nothing
+check_required(::T) where {T<:APIModel} = true
diff --git a/test/client/allany/AllAnyClient/.openapi-generator/VERSION b/test/client/allany/AllAnyClient/.openapi-generator/VERSION
index 44bad91..96cfbb1 100644
--- a/test/client/allany/AllAnyClient/.openapi-generator/VERSION
+++ b/test/client/allany/AllAnyClient/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.1-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/client/allany/AllAnyClient/README.md b/test/client/allany/AllAnyClient/README.md
index 878d7c8..97fc884 100644
--- a/test/client/allany/AllAnyClient/README.md
+++ b/test/client/allany/AllAnyClient/README.md
@@ -6,6 +6,7 @@ API to test code generation for oneof anyof allof
 This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 0.0.1
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaClientCodegen
 
 
diff --git a/test/client/allany/AllAnyClient/docs/DefaultApi.md b/test/client/allany/AllAnyClient/docs/DefaultApi.md
index b08b6ef..0d8ecc0 100644
--- a/test/client/allany/AllAnyClient/docs/DefaultApi.md
+++ b/test/client/allany/AllAnyClient/docs/DefaultApi.md
@@ -24,7 +24,7 @@ Method | HTTP request | Description
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**any_of_base_type** | [**AnyOfBaseType**](AnyOfBaseType.md)|  | 
+**any_of_base_type** | [**AnyOfBaseType**](AnyOfBaseType.md) |  |
 
 ### Return type
 
@@ -52,7 +52,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**any_of_mapped_pets** | [**AnyOfMappedPets**](AnyOfMappedPets.md)|  | 
+**any_of_mapped_pets** | [**AnyOfMappedPets**](AnyOfMappedPets.md) |  |
 
 ### Return type
 
@@ -80,7 +80,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**any_of_pets** | [**AnyOfPets**](AnyOfPets.md)|  | 
+**any_of_pets** | [**AnyOfPets**](AnyOfPets.md) |  |
 
 ### Return type
 
@@ -108,7 +108,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**type_with_all_array_types** | [**TypeWithAllArrayTypes**](TypeWithAllArrayTypes.md)|  | 
+**type_with_all_array_types** | [**TypeWithAllArrayTypes**](TypeWithAllArrayTypes.md) |  |
 
 ### Return type
 
@@ -136,7 +136,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**one_of_base_type** | [**OneOfBaseType**](OneOfBaseType.md)|  | 
+**one_of_base_type** | [**OneOfBaseType**](OneOfBaseType.md) |  |
 
 ### Return type
 
@@ -164,7 +164,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**one_of_mapped_pets** | [**OneOfMappedPets**](OneOfMappedPets.md)|  | 
+**one_of_mapped_pets** | [**OneOfMappedPets**](OneOfMappedPets.md) |  |
 
 ### Return type
 
@@ -192,7 +192,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**one_of_pets** | [**OneOfPets**](OneOfPets.md)|  | 
+**one_of_pets** | [**OneOfPets**](OneOfPets.md) |  |
 
 ### Return type
 
diff --git a/test/client/allany/AllAnyClient/src/models/model_Cat.jl b/test/client/allany/AllAnyClient/src/models/model_Cat.jl
index d4230b9..1f720cf 100644
--- a/test/client/allany/AllAnyClient/src/models/model_Cat.jl
+++ b/test/client/allany/AllAnyClient/src/models/model_Cat.jl
@@ -20,20 +20,28 @@ Base.@kwdef mutable struct Cat <: OpenAPI.APIModel
     age::Union{Nothing, Int64} = nothing
 
     function Cat(pet_type, hunts, age, )
-        OpenAPI.validate_property(Cat, Symbol("pet_type"), pet_type)
-        OpenAPI.validate_property(Cat, Symbol("hunts"), hunts)
-        OpenAPI.validate_property(Cat, Symbol("age"), age)
-        return new(pet_type, hunts, age, )
+        o = new(pet_type, hunts, age, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Cat
 
 const _property_types_Cat = Dict{Symbol,String}(Symbol("pet_type")=>"String", Symbol("hunts")=>"Bool", Symbol("age")=>"Int64", )
 OpenAPI.property_type(::Type{ Cat }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Cat[name]))}
 
-function check_required(o::Cat)
+function OpenAPI.check_required(o::Cat)
     o.pet_type === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Cat)
+    OpenAPI.validate_property(Cat, Symbol("pet_type"), o.pet_type)
+    OpenAPI.validate_property(Cat, Symbol("hunts"), o.hunts)
+    OpenAPI.validate_property(Cat, Symbol("age"), o.age)
+end
+
 function OpenAPI.validate_property(::Type{ Cat }, name::Symbol, val)
+
+
+
 end
diff --git a/test/client/allany/AllAnyClient/src/models/model_Dog.jl b/test/client/allany/AllAnyClient/src/models/model_Dog.jl
index 8af93c8..c5ac6b9 100644
--- a/test/client/allany/AllAnyClient/src/models/model_Dog.jl
+++ b/test/client/allany/AllAnyClient/src/models/model_Dog.jl
@@ -20,23 +20,32 @@ Base.@kwdef mutable struct Dog <: OpenAPI.APIModel
     breed::Union{Nothing, String} = nothing
 
     function Dog(pet_type, bark, breed, )
-        OpenAPI.validate_property(Dog, Symbol("pet_type"), pet_type)
-        OpenAPI.validate_property(Dog, Symbol("bark"), bark)
-        OpenAPI.validate_property(Dog, Symbol("breed"), breed)
-        return new(pet_type, bark, breed, )
+        o = new(pet_type, bark, breed, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Dog
 
 const _property_types_Dog = Dict{Symbol,String}(Symbol("pet_type")=>"String", Symbol("bark")=>"Bool", Symbol("breed")=>"String", )
 OpenAPI.property_type(::Type{ Dog }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Dog[name]))}
 
-function check_required(o::Dog)
+function OpenAPI.check_required(o::Dog)
     o.pet_type === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Dog)
+    OpenAPI.validate_property(Dog, Symbol("pet_type"), o.pet_type)
+    OpenAPI.validate_property(Dog, Symbol("bark"), o.bark)
+    OpenAPI.validate_property(Dog, Symbol("breed"), o.breed)
+end
+
 function OpenAPI.validate_property(::Type{ Dog }, name::Symbol, val)
+
+
+
     if name === Symbol("breed")
         OpenAPI.validate_param(name, "Dog", :enum, val, ["Dingo", "Husky", "Retriever", "Shepherd"])
     end
+
 end
diff --git a/test/client/allany/AllAnyClient/src/models/model_Pet.jl b/test/client/allany/AllAnyClient/src/models/model_Pet.jl
index f9dcf1f..e95c0d4 100644
--- a/test/client/allany/AllAnyClient/src/models/model_Pet.jl
+++ b/test/client/allany/AllAnyClient/src/models/model_Pet.jl
@@ -14,18 +14,24 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     pet_type::Union{Nothing, String} = nothing
 
     function Pet(pet_type, )
-        OpenAPI.validate_property(Pet, Symbol("pet_type"), pet_type)
-        return new(pet_type, )
+        o = new(pet_type, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("pet_type")=>"String", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.pet_type === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("pet_type"), o.pet_type)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
 end
diff --git a/test/client/allany/AllAnyClient/src/models/model_TypeWithAllArrayTypes.jl b/test/client/allany/AllAnyClient/src/models/model_TypeWithAllArrayTypes.jl
index e781139..5236187 100644
--- a/test/client/allany/AllAnyClient/src/models/model_TypeWithAllArrayTypes.jl
+++ b/test/client/allany/AllAnyClient/src/models/model_TypeWithAllArrayTypes.jl
@@ -23,20 +23,29 @@ Base.@kwdef mutable struct TypeWithAllArrayTypes <: OpenAPI.APIModel
     anyofpets::Union{Nothing, Vector} = nothing # spec type: Union{ Nothing, Vector{AnyOfPets} }
 
     function TypeWithAllArrayTypes(oneofbase, anyofbase, oneofpets, anyofpets, )
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofbase"), oneofbase)
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofbase"), anyofbase)
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofpets"), oneofpets)
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofpets"), anyofpets)
-        return new(oneofbase, anyofbase, oneofpets, anyofpets, )
+        o = new(oneofbase, anyofbase, oneofpets, anyofpets, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type TypeWithAllArrayTypes
 
 const _property_types_TypeWithAllArrayTypes = Dict{Symbol,String}(Symbol("oneofbase")=>"Vector{OneOfBaseType}", Symbol("anyofbase")=>"Vector{AnyOfBaseType}", Symbol("oneofpets")=>"Vector{OneOfPets}", Symbol("anyofpets")=>"Vector{AnyOfPets}", )
 OpenAPI.property_type(::Type{ TypeWithAllArrayTypes }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_TypeWithAllArrayTypes[name]))}
 
-function check_required(o::TypeWithAllArrayTypes)
+function OpenAPI.check_required(o::TypeWithAllArrayTypes)
     true
 end
 
+function OpenAPI.validate_properties(o::TypeWithAllArrayTypes)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofbase"), o.oneofbase)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofbase"), o.anyofbase)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofpets"), o.oneofpets)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofpets"), o.anyofpets)
+end
+
 function OpenAPI.validate_property(::Type{ TypeWithAllArrayTypes }, name::Symbol, val)
+
+
+
+
 end
diff --git a/test/client/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION b/test/client/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION
+++ b/test/client/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/client/openapigenerator_petstore_v3/petstore/README.md b/test/client/openapigenerator_petstore_v3/petstore/README.md
index eb433b9..498b243 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/README.md
+++ b/test/client/openapigenerator_petstore_v3/petstore/README.md
@@ -6,6 +6,7 @@ This is a sample server Petstore server. For this sample, you can use the api ke
 This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaClientCodegen
 
 
diff --git a/test/client/openapigenerator_petstore_v3/petstore/docs/PetApi.md b/test/client/openapigenerator_petstore_v3/petstore/docs/PetApi.md
index 12643bf..56b2a75 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/docs/PetApi.md
+++ b/test/client/openapigenerator_petstore_v3/petstore/docs/PetApi.md
@@ -27,7 +27,7 @@ Add a new pet to the store
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -57,13 +57,13 @@ Deletes a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| Pet id to delete | [default to nothing]
+**pet_id** | **Int64** | Pet id to delete |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **api_key** | **String**|  | [default to nothing]
+ **api_key** | **String** |  | [default to nothing]
 
 ### Return type
 
@@ -93,7 +93,7 @@ Multiple status values can be provided with comma separated strings
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter | [default to nothing]
+**status** | [**Vector{String}**](String.md) | Status values that need to be considered for filter |
 
 ### Return type
 
@@ -123,7 +123,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**tags** | [**Vector{String}**](String.md)| Tags to filter by | [default to nothing]
+**tags** | [**Vector{String}**](String.md) | Tags to filter by |
 
 ### Return type
 
@@ -153,7 +153,7 @@ Returns a single pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet to return | [default to nothing]
+**pet_id** | **Int64** | ID of pet to return |
 
 ### Return type
 
@@ -183,7 +183,7 @@ Update an existing pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -213,14 +213,14 @@ Updates a pet in the store with form data
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet that needs to be updated | [default to nothing]
+**pet_id** | **Int64** | ID of pet that needs to be updated |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **name** | **String**| Updated name of the pet | [default to nothing]
- **status** | **String**| Updated status of the pet | [default to nothing]
+ **name** | **String** | Updated name of the pet | [default to nothing]
+ **status** | **String** | Updated status of the pet | [default to nothing]
 
 ### Return type
 
@@ -250,14 +250,14 @@ uploads an image
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet to update | [default to nothing]
+**pet_id** | **Int64** | ID of pet to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **file** | **String****String**| file to upload | [default to nothing]
- **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
+ **file** | **String** | file to upload | 
+ **additional_metadata** | **String** | Additional data to pass to server | [default to nothing]
 
 ### Return type
 
diff --git a/test/client/openapigenerator_petstore_v3/petstore/docs/StoreApi.md b/test/client/openapigenerator_petstore_v3/petstore/docs/StoreApi.md
index 5e8bae0..659d144 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/docs/StoreApi.md
+++ b/test/client/openapigenerator_petstore_v3/petstore/docs/StoreApi.md
@@ -23,7 +23,7 @@ For valid response try integer IDs with value < 1000. Anything above 1000 or non
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order_id** | **String**| ID of the order that needs to be deleted | [default to nothing]
+**order_id** | **String** | ID of the order that needs to be deleted |
 
 ### Return type
 
@@ -79,7 +79,7 @@ For valid response try integer IDs with value <= 5 or > 10. Other values will ge
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order_id** | **Int64**| ID of pet that needs to be fetched | [default to nothing]
+**order_id** | **Int64** | ID of pet that needs to be fetched |
 
 ### Return type
 
@@ -109,7 +109,7 @@ Place an order for a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order** | [**Order**](Order.md)| order placed for purchasing the pet | 
+**order** | [**Order**](Order.md) | order placed for purchasing the pet |
 
 ### Return type
 
diff --git a/test/client/openapigenerator_petstore_v3/petstore/docs/UserApi.md b/test/client/openapigenerator_petstore_v3/petstore/docs/UserApi.md
index d839da1..5a7a243 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/docs/UserApi.md
+++ b/test/client/openapigenerator_petstore_v3/petstore/docs/UserApi.md
@@ -27,7 +27,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**user** | [**User**](User.md)| Created user object | 
+**user** | [**User**](User.md) | Created user object |
 
 ### Return type
 
@@ -57,7 +57,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md) | List of user object |
 
 ### Return type
 
@@ -87,7 +87,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md) | List of user object |
 
 ### Return type
 
@@ -117,7 +117,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The name that needs to be deleted | [default to nothing]
+**username** | **String** | The name that needs to be deleted |
 
 ### Return type
 
@@ -147,7 +147,7 @@ Get user by user name
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The name that needs to be fetched. Use user1 for testing. | [default to nothing]
+**username** | **String** | The name that needs to be fetched. Use user1 for testing. |
 
 ### Return type
 
@@ -177,8 +177,8 @@ Logs user into the system
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The user name for login | [default to nothing]
-**password** | **String**| The password for login in clear text | [default to nothing]
+**username** | **String** | The user name for login |
+**password** | **String** | The password for login in clear text |
 
 ### Return type
 
@@ -234,8 +234,8 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| name that need to be deleted | [default to nothing]
-**user** | [**User**](User.md)| Updated user object | 
+**username** | **String** | name that need to be deleted |
+**user** | [**User**](User.md) | Updated user object |
 
 ### Return type
 
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl b/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl
index 2d66bf1..a4d9e1e 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl
@@ -82,7 +82,7 @@ const _returntypes_find_pets_by_status_PetApi = Dict{Regex,Type}(
 
 function _oacinternal_find_pets_by_status(_api::PetApi, status::Vector{String}; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_find_pets_by_status_PetApi, "/pet/findByStatus", ["petstore_auth", ])
-    OpenAPI.Clients.set_param(_ctx.query, "status", status)  # type Vector{String}
+    OpenAPI.Clients.set_param(_ctx.query, "status", status; style="form", is_explode=false)  # type Vector{String}
     OpenAPI.Clients.set_header_accept(_ctx, ["application/xml", "application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
@@ -114,7 +114,7 @@ const _returntypes_find_pets_by_tags_PetApi = Dict{Regex,Type}(
 
 function _oacinternal_find_pets_by_tags(_api::PetApi, tags::Vector{String}; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_find_pets_by_tags_PetApi, "/pet/findByTags", ["petstore_auth", ])
-    OpenAPI.Clients.set_param(_ctx.query, "tags", tags)  # type Vector{String}
+    OpenAPI.Clients.set_param(_ctx.query, "tags", tags; style="form", is_explode=false)  # type Vector{String}
     OpenAPI.Clients.set_header_accept(_ctx, ["application/xml", "application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
@@ -247,7 +247,7 @@ const _returntypes_upload_file_PetApi = Dict{Regex,Type}(
 function _oacinternal_upload_file(_api::PetApi, pet_id::Int64; file=nothing, additional_metadata=nothing, _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "POST", _returntypes_upload_file_PetApi, "/pet/{petId}/uploadImage", ["petstore_auth", ])
     OpenAPI.Clients.set_param(_ctx.path, "petId", pet_id)  # type Int64
-    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type Vector{UInt8}
+    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type String
     OpenAPI.Clients.set_param(_ctx.form, "additionalMetadata", additional_metadata)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? ["multipart/form-data", ] : [_mediaType])
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl b/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl
index 52dceb8..fb30046 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl
@@ -172,10 +172,11 @@ const _returntypes_login_user_UserApi = Dict{Regex,Type}(
 )
 
 function _oacinternal_login_user(_api::UserApi, username::String, password::String; _mediaType=nothing)
+        OpenAPI.validate_param("username", "login_user", :pattern, username, r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$")
 
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_login_user_UserApi, "/user/login", [])
-    OpenAPI.Clients.set_param(_ctx.query, "username", username)  # type String
-    OpenAPI.Clients.set_param(_ctx.query, "password", password)  # type String
+    OpenAPI.Clients.set_param(_ctx.query, "username", username; style="form", is_explode=true)  # type String
+    OpenAPI.Clients.set_param(_ctx.query, "password", password; style="form", is_explode=true)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/xml", "application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl
index e19464b..80cfeac 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl
@@ -21,22 +21,30 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
     type::Union{Nothing, String} = nothing
 
     function ApiResponse(message, code, type, )
-        OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
-        OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
-        OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
-        return new(message, code, type, )
+        o = new(message, code, type, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type ApiResponse
 
 const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("message")=>"String", Symbol("code")=>"Int64", Symbol("type")=>"String", )
 OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
 
-function check_required(o::ApiResponse)
+function OpenAPI.check_required(o::ApiResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::ApiResponse)
+    OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
+    OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
+    OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
+end
+
 function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
+
+
     if name === Symbol("code")
         OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32")
     end
+
 end
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl
index 5224efb..53e027a 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl
@@ -18,23 +18,30 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
     id::Union{Nothing, Int64} = nothing
 
     function Category(name, id, )
-        OpenAPI.validate_property(Category, Symbol("name"), name)
-        OpenAPI.validate_property(Category, Symbol("id"), id)
-        return new(name, id, )
+        o = new(name, id, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Category
 
 const _property_types_Category = Dict{Symbol,String}(Symbol("name")=>"String", Symbol("id")=>"Int64", )
 OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
 
-function check_required(o::Category)
+function OpenAPI.check_required(o::Category)
     true
 end
 
+function OpenAPI.validate_properties(o::Category)
+    OpenAPI.validate_property(Category, Symbol("name"), o.name)
+    OpenAPI.validate_property(Category, Symbol("id"), o.id)
+end
+
 function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
+
     if name === Symbol("name")
         OpenAPI.validate_param(name, "Category", :pattern, val, r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$")
     end
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Category", :format, val, "int64")
     end
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl
index da94163..da6c81e 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl
@@ -30,36 +30,48 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
     quantity::Union{Nothing, Int64} = nothing
 
     function Order(petId, shipDate, status, id, complete, quantity, )
-        OpenAPI.validate_property(Order, Symbol("petId"), petId)
-        OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
-        OpenAPI.validate_property(Order, Symbol("status"), status)
-        OpenAPI.validate_property(Order, Symbol("id"), id)
-        OpenAPI.validate_property(Order, Symbol("complete"), complete)
-        OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
-        return new(petId, shipDate, status, id, complete, quantity, )
+        o = new(petId, shipDate, status, id, complete, quantity, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Order
 
 const _property_types_Order = Dict{Symbol,String}(Symbol("petId")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("id")=>"Int64", Symbol("complete")=>"Bool", Symbol("quantity")=>"Int64", )
 OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
 
-function check_required(o::Order)
+function OpenAPI.check_required(o::Order)
     true
 end
 
+function OpenAPI.validate_properties(o::Order)
+    OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
+    OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
+    OpenAPI.validate_property(Order, Symbol("status"), o.status)
+    OpenAPI.validate_property(Order, Symbol("id"), o.id)
+    OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
+    OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
+end
+
 function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
+
     if name === Symbol("petId")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("shipDate")
         OpenAPI.validate_param(name, "Order", :format, val, "date-time")
     end
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"])
     end
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
+
     if name === Symbol("quantity")
         OpenAPI.validate_param(name, "Order", :format, val, "int32")
     end
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl
index 2b4069f..9b30f64 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl
@@ -30,30 +30,42 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     category = nothing # spec type: Union{ Nothing, Category }
 
     function Pet(name, status, id, photoUrls, tags, category, )
-        OpenAPI.validate_property(Pet, Symbol("name"), name)
-        OpenAPI.validate_property(Pet, Symbol("status"), status)
-        OpenAPI.validate_property(Pet, Symbol("id"), id)
-        OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
-        OpenAPI.validate_property(Pet, Symbol("tags"), tags)
-        OpenAPI.validate_property(Pet, Symbol("category"), category)
-        return new(name, status, id, photoUrls, tags, category, )
+        o = new(name, status, id, photoUrls, tags, category, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("name")=>"String", Symbol("status")=>"String", Symbol("id")=>"Int64", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("category")=>"Category", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.name === nothing && (return false)
     o.photoUrls === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("name"), o.name)
+    OpenAPI.validate_property(Pet, Symbol("status"), o.status)
+    OpenAPI.validate_property(Pet, Symbol("id"), o.id)
+    OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
+    OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
+    OpenAPI.validate_property(Pet, Symbol("category"), o.category)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"])
     end
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Pet", :format, val, "int64")
     end
+
+
+
 end
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl
index f3410e8..0550acc 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl
@@ -18,20 +18,27 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
     id::Union{Nothing, Int64} = nothing
 
     function Tag(name, id, )
-        OpenAPI.validate_property(Tag, Symbol("name"), name)
-        OpenAPI.validate_property(Tag, Symbol("id"), id)
-        return new(name, id, )
+        o = new(name, id, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Tag
 
 const _property_types_Tag = Dict{Symbol,String}(Symbol("name")=>"String", Symbol("id")=>"Int64", )
 OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
 
-function check_required(o::Tag)
+function OpenAPI.check_required(o::Tag)
     true
 end
 
+function OpenAPI.validate_properties(o::Tag)
+    OpenAPI.validate_property(Tag, Symbol("name"), o.name)
+    OpenAPI.validate_property(Tag, Symbol("id"), o.id)
+end
+
 function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Tag", :format, val, "int64")
     end
diff --git a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_User.jl b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_User.jl
index 0572483..95e836a 100644
--- a/test/client/openapigenerator_petstore_v3/petstore/src/models/model_User.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore/src/models/model_User.jl
@@ -36,30 +36,43 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
     email::Union{Nothing, String} = nothing
 
     function User(password, id, username, firstName, lastName, phone, userStatus, email, )
-        OpenAPI.validate_property(User, Symbol("password"), password)
-        OpenAPI.validate_property(User, Symbol("id"), id)
-        OpenAPI.validate_property(User, Symbol("username"), username)
-        OpenAPI.validate_property(User, Symbol("firstName"), firstName)
-        OpenAPI.validate_property(User, Symbol("lastName"), lastName)
-        OpenAPI.validate_property(User, Symbol("phone"), phone)
-        OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
-        OpenAPI.validate_property(User, Symbol("email"), email)
-        return new(password, id, username, firstName, lastName, phone, userStatus, email, )
+        o = new(password, id, username, firstName, lastName, phone, userStatus, email, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type User
 
 const _property_types_User = Dict{Symbol,String}(Symbol("password")=>"String", Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", Symbol("email")=>"String", )
 OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
 
-function check_required(o::User)
+function OpenAPI.check_required(o::User)
     true
 end
 
+function OpenAPI.validate_properties(o::User)
+    OpenAPI.validate_property(User, Symbol("password"), o.password)
+    OpenAPI.validate_property(User, Symbol("id"), o.id)
+    OpenAPI.validate_property(User, Symbol("username"), o.username)
+    OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
+    OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
+    OpenAPI.validate_property(User, Symbol("phone"), o.phone)
+    OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
+    OpenAPI.validate_property(User, Symbol("email"), o.email)
+end
+
 function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "User", :format, val, "int64")
     end
+
+
+
+
+
     if name === Symbol("userStatus")
         OpenAPI.validate_param(name, "User", :format, val, "int32")
     end
+
 end
diff --git a/test/client/openapigenerator_petstore_v3/petstore_test_petapi.jl b/test/client/openapigenerator_petstore_v3/petstore_test_petapi.jl
index fb0b080..363ee0f 100644
--- a/test/client/openapigenerator_petstore_v3/petstore_test_petapi.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore_test_petapi.jl
@@ -17,7 +17,7 @@ function test(uri; test_file_upload=false)
 
     @test_throws OpenAPI.ValidationException Pet(;id=10, category=cat, name="felix", photoUrls=nothing, tags=[tag1, tag2], status="invalid-status")
 
-    pet = Pet(;id=10, category=cat, name="felix", photoUrls=nothing, tags=[tag1,tag2], status="pending")
+    pet = Pet(;id=10, category=cat, name="felix", photoUrls=["http://photo/1","http://photo/2"], tags=[tag1,tag2], status="pending")
 
     @info("PetApi - add_pet")
     api_return, http_resp = add_pet(api, pet)
diff --git a/test/client/openapigenerator_petstore_v3/petstore_test_storeapi.jl b/test/client/openapigenerator_petstore_v3/petstore_test_storeapi.jl
index 15991b6..81e8360 100644
--- a/test/client/openapigenerator_petstore_v3/petstore_test_storeapi.jl
+++ b/test/client/openapigenerator_petstore_v3/petstore_test_storeapi.jl
@@ -20,7 +20,7 @@ function test(uri)
     @test !isempty(inventory)
 
     @info("StoreApi - place_order")
-    @test_throws OpenAPI.ValidationException Order(; id=5, petId=10, quantity=2, shipDate=DateTime(2017, 03, 12), status="invalid_status", complete=false)
+    @test_throws OpenAPI.ValidationException Order(; id=5, petId=10, quantity=2, shipDate=ZonedDateTime(DateTime(2017, 03, 12), localzone()), status="invalid_status", complete=false)
     order = Order(; id=5, petId=10, quantity=2, shipDate=ZonedDateTime(DateTime(2017, 03, 12), localzone()), status="placed", complete=false)
     neworder, http_resp = place_order(api, order)
     @test http_resp.status == 200
diff --git a/test/client/petstore_v2/petstore/.openapi-generator/VERSION b/test/client/petstore_v2/petstore/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/client/petstore_v2/petstore/.openapi-generator/VERSION
+++ b/test/client/petstore_v2/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/client/petstore_v2/petstore/README.md b/test/client/petstore_v2/petstore/README.md
index b6cee82..ffb43f5 100644
--- a/test/client/petstore_v2/petstore/README.md
+++ b/test/client/petstore_v2/petstore/README.md
@@ -6,6 +6,7 @@ This is a sample server Petstore server.  You can find out more about Swagger at
 This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.6
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaClientCodegen
 
 
diff --git a/test/client/petstore_v2/petstore/docs/PetApi.md b/test/client/petstore_v2/petstore/docs/PetApi.md
index d9e89af..2d1454d 100644
--- a/test/client/petstore_v2/petstore/docs/PetApi.md
+++ b/test/client/petstore_v2/petstore/docs/PetApi.md
@@ -25,7 +25,7 @@ Add a new pet to the store
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -53,13 +53,13 @@ Deletes a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| Pet id to delete | [default to nothing]
+**pet_id** | **Int64** | Pet id to delete |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **api_key** | **String**|  | [default to nothing]
+ **api_key** | **String** |  | [default to nothing]
 
 ### Return type
 
@@ -89,7 +89,7 @@ Multiple status values can be provided with comma separated strings
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter | [default to nothing]
+**status** | [**Vector{String}**](String.md) | Status values that need to be considered for filter |
 
 ### Return type
 
@@ -119,7 +119,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**tags** | [**Vector{String}**](String.md)| Tags to filter by | [default to nothing]
+**tags** | [**Vector{String}**](String.md) | Tags to filter by |
 
 ### Return type
 
@@ -149,7 +149,7 @@ Returns a single pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet to return | [default to nothing]
+**pet_id** | **Int64** | ID of pet to return |
 
 ### Return type
 
@@ -177,7 +177,7 @@ Update an existing pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**body** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -205,14 +205,14 @@ Updates a pet in the store with form data
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet that needs to be updated | [default to nothing]
+**pet_id** | **Int64** | ID of pet that needs to be updated |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **name** | **String**| Updated name of the pet | [default to nothing]
- **status** | **String**| Updated status of the pet | [default to nothing]
+ **name** | **String** | Updated name of the pet | [default to nothing]
+ **status** | **String** | Updated status of the pet | [default to nothing]
 
 ### Return type
 
@@ -240,14 +240,14 @@ uploads an image
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet to update | [default to nothing]
+**pet_id** | **Int64** | ID of pet to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
- **file** | **String****String**| file to upload | [default to nothing]
+ **additional_metadata** | **String** | Additional data to pass to server | [default to nothing]
+ **file** | **String** | file to upload | 
 
 ### Return type
 
diff --git a/test/client/petstore_v2/petstore/docs/StoreApi.md b/test/client/petstore_v2/petstore/docs/StoreApi.md
index 5331bcd..0a1b029 100644
--- a/test/client/petstore_v2/petstore/docs/StoreApi.md
+++ b/test/client/petstore_v2/petstore/docs/StoreApi.md
@@ -23,7 +23,7 @@ For valid response try integer IDs with positive integer value. Negative or non-
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order_id** | **Int64**| ID of the order that needs to be deleted | [default to nothing]
+**order_id** | **Int64** | ID of the order that needs to be deleted |
 
 ### Return type
 
@@ -79,7 +79,7 @@ For valid response try integer IDs with value >= 1 and <= 10. Other values will
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order_id** | **Int64**| ID of pet that needs to be fetched | [default to nothing]
+**order_id** | **Int64** | ID of pet that needs to be fetched |
 
 ### Return type
 
@@ -107,7 +107,7 @@ Place an order for a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**body** | [**Order**](Order.md)| order placed for purchasing the pet | 
+**body** | [**Order**](Order.md) | order placed for purchasing the pet |
 
 ### Return type
 
diff --git a/test/client/petstore_v2/petstore/docs/UserApi.md b/test/client/petstore_v2/petstore/docs/UserApi.md
index b7befee..27639c4 100644
--- a/test/client/petstore_v2/petstore/docs/UserApi.md
+++ b/test/client/petstore_v2/petstore/docs/UserApi.md
@@ -27,7 +27,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**body** | [**User**](User.md)| Created user object | 
+**body** | [**User**](User.md) | Created user object |
 
 ### Return type
 
@@ -55,7 +55,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**body** | [**Vector{User}**](User.md)| List of user object | 
+**body** | [**Vector{User}**](User.md) | List of user object |
 
 ### Return type
 
@@ -83,7 +83,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**body** | [**Vector{User}**](User.md)| List of user object | 
+**body** | [**Vector{User}**](User.md) | List of user object |
 
 ### Return type
 
@@ -113,7 +113,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The name that needs to be deleted | [default to nothing]
+**username** | **String** | The name that needs to be deleted |
 
 ### Return type
 
@@ -141,7 +141,7 @@ Get user by user name
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The name that needs to be fetched. Use user1 for testing.  | [default to nothing]
+**username** | **String** | The name that needs to be fetched. Use user1 for testing.  |
 
 ### Return type
 
@@ -169,8 +169,8 @@ Logs user into the system
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The user name for login | [default to nothing]
-**password** | **String**| The password for login in clear text | [default to nothing]
+**username** | **String** | The user name for login |
+**password** | **String** | The password for login in clear text |
 
 ### Return type
 
@@ -224,8 +224,8 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| name that need to be updated | [default to nothing]
-**body** | [**User**](User.md)| Updated user object | 
+**username** | **String** | name that need to be updated |
+**body** | [**User**](User.md) | Updated user object |
 
 ### Return type
 
diff --git a/test/client/petstore_v2/petstore/src/apis/api_PetApi.jl b/test/client/petstore_v2/petstore/src/apis/api_PetApi.jl
index 6211942..4a3dada 100644
--- a/test/client/petstore_v2/petstore/src/apis/api_PetApi.jl
+++ b/test/client/petstore_v2/petstore/src/apis/api_PetApi.jl
@@ -78,7 +78,7 @@ const _returntypes_find_pets_by_status_PetApi = Dict{Regex,Type}(
 
 function _oacinternal_find_pets_by_status(_api::PetApi, status::Vector{String}; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_find_pets_by_status_PetApi, "/pet/findByStatus", ["petstore_auth", ])
-    OpenAPI.Clients.set_param(_ctx.query, "status", status)  # type Vector{String}
+    OpenAPI.Clients.set_param(_ctx.query, "status", status; style="form", is_explode=true)  # type Vector{String}
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", "application/xml", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
@@ -110,7 +110,7 @@ const _returntypes_find_pets_by_tags_PetApi = Dict{Regex,Type}(
 
 function _oacinternal_find_pets_by_tags(_api::PetApi, tags::Vector{String}; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_find_pets_by_tags_PetApi, "/pet/findByTags", ["petstore_auth", ])
-    OpenAPI.Clients.set_param(_ctx.query, "tags", tags)  # type Vector{String}
+    OpenAPI.Clients.set_param(_ctx.query, "tags", tags; style="form", is_explode=true)  # type Vector{String}
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", "application/xml", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
@@ -239,7 +239,7 @@ function _oacinternal_upload_file(_api::PetApi, pet_id::Int64; additional_metada
     _ctx = OpenAPI.Clients.Ctx(_api.client, "POST", _returntypes_upload_file_PetApi, "/pet/{petId}/uploadImage", ["petstore_auth", ])
     OpenAPI.Clients.set_param(_ctx.path, "petId", pet_id)  # type Int64
     OpenAPI.Clients.set_param(_ctx.form, "additionalMetadata", additional_metadata)  # type String
-    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type Vector{UInt8}
+    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? ["multipart/form-data", ] : [_mediaType])
     return _ctx
diff --git a/test/client/petstore_v2/petstore/src/apis/api_UserApi.jl b/test/client/petstore_v2/petstore/src/apis/api_UserApi.jl
index cdc26df..3515b3d 100644
--- a/test/client/petstore_v2/petstore/src/apis/api_UserApi.jl
+++ b/test/client/petstore_v2/petstore/src/apis/api_UserApi.jl
@@ -167,8 +167,8 @@ const _returntypes_login_user_UserApi = Dict{Regex,Type}(
 
 function _oacinternal_login_user(_api::UserApi, username::String, password::String; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_login_user_UserApi, "/user/login", [])
-    OpenAPI.Clients.set_param(_ctx.query, "username", username)  # type String
-    OpenAPI.Clients.set_param(_ctx.query, "password", password)  # type String
+    OpenAPI.Clients.set_param(_ctx.query, "username", username; style="", is_explode=false)  # type String
+    OpenAPI.Clients.set_param(_ctx.query, "password", password; style="", is_explode=false)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", "application/xml", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
diff --git a/test/client/petstore_v2/petstore/src/models/model_ApiResponse.jl b/test/client/petstore_v2/petstore/src/models/model_ApiResponse.jl
index e8b7ce2..a196ba0 100644
--- a/test/client/petstore_v2/petstore/src/models/model_ApiResponse.jl
+++ b/test/client/petstore_v2/petstore/src/models/model_ApiResponse.jl
@@ -20,22 +20,30 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
     message::Union{Nothing, String} = nothing
 
     function ApiResponse(code, type, message, )
-        OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
-        OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
-        OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
-        return new(code, type, message, )
+        o = new(code, type, message, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type ApiResponse
 
 const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("code")=>"Int64", Symbol("type")=>"String", Symbol("message")=>"String", )
 OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
 
-function check_required(o::ApiResponse)
+function OpenAPI.check_required(o::ApiResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::ApiResponse)
+    OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
+    OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
+    OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
+end
+
 function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
+
     if name === Symbol("code")
         OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32")
     end
+
+
 end
diff --git a/test/client/petstore_v2/petstore/src/models/model_Category.jl b/test/client/petstore_v2/petstore/src/models/model_Category.jl
index 3153470..159890d 100644
--- a/test/client/petstore_v2/petstore/src/models/model_Category.jl
+++ b/test/client/petstore_v2/petstore/src/models/model_Category.jl
@@ -17,21 +17,28 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Category(id, name, )
-        OpenAPI.validate_property(Category, Symbol("id"), id)
-        OpenAPI.validate_property(Category, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Category
 
 const _property_types_Category = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
 
-function check_required(o::Category)
+function OpenAPI.check_required(o::Category)
     true
 end
 
+function OpenAPI.validate_properties(o::Category)
+    OpenAPI.validate_property(Category, Symbol("id"), o.id)
+    OpenAPI.validate_property(Category, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Category", :format, val, "int64")
     end
+
 end
diff --git a/test/client/petstore_v2/petstore/src/models/model_Order.jl b/test/client/petstore_v2/petstore/src/models/model_Order.jl
index 0f7efe8..a11ca51 100644
--- a/test/client/petstore_v2/petstore/src/models/model_Order.jl
+++ b/test/client/petstore_v2/petstore/src/models/model_Order.jl
@@ -29,37 +29,49 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
     complete::Union{Nothing, Bool} = nothing
 
     function Order(id, petId, quantity, shipDate, status, complete, )
-        OpenAPI.validate_property(Order, Symbol("id"), id)
-        OpenAPI.validate_property(Order, Symbol("petId"), petId)
-        OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
-        OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
-        OpenAPI.validate_property(Order, Symbol("status"), status)
-        OpenAPI.validate_property(Order, Symbol("complete"), complete)
-        return new(id, petId, quantity, shipDate, status, complete, )
+        o = new(id, petId, quantity, shipDate, status, complete, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Order
 
 const _property_types_Order = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("petId")=>"Int64", Symbol("quantity")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("complete")=>"Bool", )
 OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
 
-function check_required(o::Order)
+function OpenAPI.check_required(o::Order)
     true
 end
 
+function OpenAPI.validate_properties(o::Order)
+    OpenAPI.validate_property(Order, Symbol("id"), o.id)
+    OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
+    OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
+    OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
+    OpenAPI.validate_property(Order, Symbol("status"), o.status)
+    OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
+end
+
 function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("petId")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("quantity")
         OpenAPI.validate_param(name, "Order", :format, val, "int32")
     end
+
     if name === Symbol("shipDate")
         OpenAPI.validate_param(name, "Order", :format, val, "date-time")
     end
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"])
     end
+
+
 end
diff --git a/test/client/petstore_v2/petstore/src/models/model_Pet.jl b/test/client/petstore_v2/petstore/src/models/model_Pet.jl
index ab01a63..322d93a 100644
--- a/test/client/petstore_v2/petstore/src/models/model_Pet.jl
+++ b/test/client/petstore_v2/petstore/src/models/model_Pet.jl
@@ -29,30 +29,42 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     status::Union{Nothing, String} = nothing
 
     function Pet(id, category, name, photoUrls, tags, status, )
-        OpenAPI.validate_property(Pet, Symbol("id"), id)
-        OpenAPI.validate_property(Pet, Symbol("category"), category)
-        OpenAPI.validate_property(Pet, Symbol("name"), name)
-        OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
-        OpenAPI.validate_property(Pet, Symbol("tags"), tags)
-        OpenAPI.validate_property(Pet, Symbol("status"), status)
-        return new(id, category, name, photoUrls, tags, status, )
+        o = new(id, category, name, photoUrls, tags, status, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("category")=>"Category", Symbol("name")=>"String", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("status")=>"String", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.name === nothing && (return false)
     o.photoUrls === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("id"), o.id)
+    OpenAPI.validate_property(Pet, Symbol("category"), o.category)
+    OpenAPI.validate_property(Pet, Symbol("name"), o.name)
+    OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
+    OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
+    OpenAPI.validate_property(Pet, Symbol("status"), o.status)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Pet", :format, val, "int64")
     end
+
+
+
+
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"])
     end
+
 end
diff --git a/test/client/petstore_v2/petstore/src/models/model_Tag.jl b/test/client/petstore_v2/petstore/src/models/model_Tag.jl
index ee91e56..83051f1 100644
--- a/test/client/petstore_v2/petstore/src/models/model_Tag.jl
+++ b/test/client/petstore_v2/petstore/src/models/model_Tag.jl
@@ -17,21 +17,28 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Tag(id, name, )
-        OpenAPI.validate_property(Tag, Symbol("id"), id)
-        OpenAPI.validate_property(Tag, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Tag
 
 const _property_types_Tag = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
 
-function check_required(o::Tag)
+function OpenAPI.check_required(o::Tag)
     true
 end
 
+function OpenAPI.validate_properties(o::Tag)
+    OpenAPI.validate_property(Tag, Symbol("id"), o.id)
+    OpenAPI.validate_property(Tag, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Tag", :format, val, "int64")
     end
+
 end
diff --git a/test/client/petstore_v2/petstore/src/models/model_User.jl b/test/client/petstore_v2/petstore/src/models/model_User.jl
index 2233bcf..39b2359 100644
--- a/test/client/petstore_v2/petstore/src/models/model_User.jl
+++ b/test/client/petstore_v2/petstore/src/models/model_User.jl
@@ -35,29 +35,42 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
     userStatus::Union{Nothing, Int64} = nothing
 
     function User(id, username, firstName, lastName, email, password, phone, userStatus, )
-        OpenAPI.validate_property(User, Symbol("id"), id)
-        OpenAPI.validate_property(User, Symbol("username"), username)
-        OpenAPI.validate_property(User, Symbol("firstName"), firstName)
-        OpenAPI.validate_property(User, Symbol("lastName"), lastName)
-        OpenAPI.validate_property(User, Symbol("email"), email)
-        OpenAPI.validate_property(User, Symbol("password"), password)
-        OpenAPI.validate_property(User, Symbol("phone"), phone)
-        OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
-        return new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        o = new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type User
 
 const _property_types_User = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("email")=>"String", Symbol("password")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", )
 OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
 
-function check_required(o::User)
+function OpenAPI.check_required(o::User)
     true
 end
 
+function OpenAPI.validate_properties(o::User)
+    OpenAPI.validate_property(User, Symbol("id"), o.id)
+    OpenAPI.validate_property(User, Symbol("username"), o.username)
+    OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
+    OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
+    OpenAPI.validate_property(User, Symbol("email"), o.email)
+    OpenAPI.validate_property(User, Symbol("password"), o.password)
+    OpenAPI.validate_property(User, Symbol("phone"), o.phone)
+    OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
+end
+
 function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "User", :format, val, "int64")
     end
+
+
+
+
+
+
+
     if name === Symbol("userStatus")
         OpenAPI.validate_param(name, "User", :format, val, "int32")
     end
diff --git a/test/client/petstore_v2/petstore_test_petapi.jl b/test/client/petstore_v2/petstore_test_petapi.jl
index 4ffa17c..ca34260 100644
--- a/test/client/petstore_v2/petstore_test_petapi.jl
+++ b/test/client/petstore_v2/petstore_test_petapi.jl
@@ -17,7 +17,7 @@ function test(uri)
 
     @test_throws OpenAPI.ValidationException Pet(;id=10, category=cat, name="felix", photoUrls=nothing, tags=[tag1, tag2], status="invalid-status")
 
-    pet = Pet(;id=10, category=cat, name="felix", photoUrls=nothing, tags=[tag1,tag2], status="pending")
+    pet = Pet(;id=10, category=cat, name="felix", photoUrls=["http://photo/1","http://photo/2"], tags=[tag1,tag2], status="pending")
 
     @info("PetApi - add_pet")
     api_return, http_resp = add_pet(api, pet)
diff --git a/test/client/petstore_v2/petstore_test_storeapi.jl b/test/client/petstore_v2/petstore_test_storeapi.jl
index fc07ef5..252a5f9 100644
--- a/test/client/petstore_v2/petstore_test_storeapi.jl
+++ b/test/client/petstore_v2/petstore_test_storeapi.jl
@@ -20,7 +20,7 @@ function test(uri)
     @test !isempty(inventory)
 
     @info("StoreApi - place_order")
-    @test_throws OpenAPI.ValidationException Order(; id=5, petId=10, quantity=2, shipDate=DateTime(2017, 03, 12), status="invalid_status", complete=false)
+    @test_throws OpenAPI.ValidationException Order(; id=5, petId=10, quantity=2, shipDate=ZonedDateTime(DateTime(2017, 03, 12), localzone()), status="invalid_status", complete=false)
     order = Order(; id=5, petId=10, quantity=2, shipDate=ZonedDateTime(DateTime(2017, 03, 12), localzone()), status="placed", complete=false)
     neworder, http_resp = place_order(api, order)
     @test http_resp.status == 200
diff --git a/test/client/petstore_v3/petstore/.openapi-generator/VERSION b/test/client/petstore_v3/petstore/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/client/petstore_v3/petstore/.openapi-generator/VERSION
+++ b/test/client/petstore_v3/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/client/petstore_v3/petstore/README.md b/test/client/petstore_v3/petstore/README.md
index 2bf1cea..bb7aa74 100644
--- a/test/client/petstore_v3/petstore/README.md
+++ b/test/client/petstore_v3/petstore/README.md
@@ -6,6 +6,7 @@ This is a sample server Petstore server. For this sample, you can use the api ke
 This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaClientCodegen
 
 
diff --git a/test/client/petstore_v3/petstore/docs/PetApi.md b/test/client/petstore_v3/petstore/docs/PetApi.md
index 00fa41e..e9355d1 100644
--- a/test/client/petstore_v3/petstore/docs/PetApi.md
+++ b/test/client/petstore_v3/petstore/docs/PetApi.md
@@ -25,7 +25,7 @@ Add a new pet to the store
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -53,13 +53,13 @@ Deletes a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| Pet id to delete | [default to nothing]
+**pet_id** | **Int64** | Pet id to delete |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **api_key** | **String**|  | [default to nothing]
+ **api_key** | **String** |  | [default to nothing]
 
 ### Return type
 
@@ -89,7 +89,7 @@ Multiple status values can be provided with comma separated strings
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter | [default to nothing]
+**status** | [**Vector{String}**](String.md) | Status values that need to be considered for filter |
 
 ### Return type
 
@@ -119,7 +119,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**tags** | [**Vector{String}**](String.md)| Tags to filter by | [default to nothing]
+**tags** | [**Vector{String}**](String.md) | Tags to filter by |
 
 ### Return type
 
@@ -149,7 +149,7 @@ Returns a single pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet to return | [default to nothing]
+**pet_id** | **Int64** | ID of pet to return |
 
 ### Return type
 
@@ -177,7 +177,7 @@ Update an existing pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md) | Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -205,14 +205,14 @@ Updates a pet in the store with form data
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet that needs to be updated | [default to nothing]
+**pet_id** | **Int64** | ID of pet that needs to be updated |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **name** | **String**| Updated name of the pet | [default to nothing]
- **status** | **String**| Updated status of the pet | [default to nothing]
+ **name** | **String** | Updated name of the pet | [default to nothing]
+ **status** | **String** | Updated status of the pet | [default to nothing]
 
 ### Return type
 
@@ -240,14 +240,14 @@ uploads an image
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **PetApi** | API context | 
-**pet_id** | **Int64**| ID of pet to update | [default to nothing]
+**pet_id** | **Int64** | ID of pet to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
- **file** | **String****String**| file to upload | [default to nothing]
+ **additional_metadata** | **String** | Additional data to pass to server | [default to nothing]
+ **file** | **String** | file to upload | 
 
 ### Return type
 
diff --git a/test/client/petstore_v3/petstore/docs/StoreApi.md b/test/client/petstore_v3/petstore/docs/StoreApi.md
index bca4f2f..6a6f6b9 100644
--- a/test/client/petstore_v3/petstore/docs/StoreApi.md
+++ b/test/client/petstore_v3/petstore/docs/StoreApi.md
@@ -23,7 +23,7 @@ For valid response try integer IDs with value < 1000. Anything above 1000 or non
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order_id** | **String**| ID of the order that needs to be deleted | [default to nothing]
+**order_id** | **String** | ID of the order that needs to be deleted |
 
 ### Return type
 
@@ -79,7 +79,7 @@ For valid response try integer IDs with value <= 5 or > 10. Other values will ge
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order_id** | **Int64**| ID of pet that needs to be fetched | [default to nothing]
+**order_id** | **Int64** | ID of pet that needs to be fetched |
 
 ### Return type
 
@@ -107,7 +107,7 @@ Place an order for a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **StoreApi** | API context | 
-**order** | [**Order**](Order.md)| order placed for purchasing the pet | 
+**order** | [**Order**](Order.md) | order placed for purchasing the pet |
 
 ### Return type
 
diff --git a/test/client/petstore_v3/petstore/docs/UserApi.md b/test/client/petstore_v3/petstore/docs/UserApi.md
index 305e173..fdb5b07 100644
--- a/test/client/petstore_v3/petstore/docs/UserApi.md
+++ b/test/client/petstore_v3/petstore/docs/UserApi.md
@@ -27,7 +27,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**user** | [**User**](User.md)| Created user object | 
+**user** | [**User**](User.md) | Created user object |
 
 ### Return type
 
@@ -55,7 +55,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md) | List of user object |
 
 ### Return type
 
@@ -83,7 +83,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md) | List of user object |
 
 ### Return type
 
@@ -113,7 +113,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The name that needs to be deleted | [default to nothing]
+**username** | **String** | The name that needs to be deleted |
 
 ### Return type
 
@@ -141,7 +141,7 @@ Get user by user name
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The name that needs to be fetched. Use user1 for testing. | [default to nothing]
+**username** | **String** | The name that needs to be fetched. Use user1 for testing. |
 
 ### Return type
 
@@ -169,8 +169,8 @@ Logs user into the system
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| The user name for login | [default to nothing]
-**password** | **String**| The password for login in clear text | [default to nothing]
+**username** | **String** | The user name for login |
+**password** | **String** | The password for login in clear text |
 
 ### Return type
 
@@ -224,8 +224,8 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **UserApi** | API context | 
-**username** | **String**| name that need to be deleted | [default to nothing]
-**user** | [**User**](User.md)| Updated user object | 
+**username** | **String** | name that need to be deleted |
+**user** | [**User**](User.md) | Updated user object |
 
 ### Return type
 
diff --git a/test/client/petstore_v3/petstore/src/apis/api_PetApi.jl b/test/client/petstore_v3/petstore/src/apis/api_PetApi.jl
index c80c8f2..426eb55 100644
--- a/test/client/petstore_v3/petstore/src/apis/api_PetApi.jl
+++ b/test/client/petstore_v3/petstore/src/apis/api_PetApi.jl
@@ -77,7 +77,7 @@ const _returntypes_find_pets_by_status_PetApi = Dict{Regex,Type}(
 
 function _oacinternal_find_pets_by_status(_api::PetApi, status::Vector{String}; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_find_pets_by_status_PetApi, "/pet/findByStatus", ["petstore_auth", ])
-    OpenAPI.Clients.set_param(_ctx.query, "status", status)  # type Vector{String}
+    OpenAPI.Clients.set_param(_ctx.query, "status", status; style="form", is_explode=false)  # type Vector{String}
     OpenAPI.Clients.set_header_accept(_ctx, ["application/xml", "application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
@@ -109,7 +109,7 @@ const _returntypes_find_pets_by_tags_PetApi = Dict{Regex,Type}(
 
 function _oacinternal_find_pets_by_tags(_api::PetApi, tags::Vector{String}; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_find_pets_by_tags_PetApi, "/pet/findByTags", ["petstore_auth", ])
-    OpenAPI.Clients.set_param(_ctx.query, "tags", tags)  # type Vector{String}
+    OpenAPI.Clients.set_param(_ctx.query, "tags", tags; style="form", is_explode=false)  # type Vector{String}
     OpenAPI.Clients.set_header_accept(_ctx, ["application/xml", "application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
@@ -238,7 +238,7 @@ function _oacinternal_upload_file(_api::PetApi, pet_id::Int64; additional_metada
     _ctx = OpenAPI.Clients.Ctx(_api.client, "POST", _returntypes_upload_file_PetApi, "/pet/{petId}/uploadImage", ["petstore_auth", ])
     OpenAPI.Clients.set_param(_ctx.path, "petId", pet_id)  # type Int64
     OpenAPI.Clients.set_param(_ctx.form, "additionalMetadata", additional_metadata)  # type String
-    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type Vector{UInt8}
+    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? ["multipart/form-data", ] : [_mediaType])
     return _ctx
diff --git a/test/client/petstore_v3/petstore/src/apis/api_UserApi.jl b/test/client/petstore_v3/petstore/src/apis/api_UserApi.jl
index 62af4d7..5939776 100644
--- a/test/client/petstore_v3/petstore/src/apis/api_UserApi.jl
+++ b/test/client/petstore_v3/petstore/src/apis/api_UserApi.jl
@@ -167,8 +167,8 @@ const _returntypes_login_user_UserApi = Dict{Regex,Type}(
 
 function _oacinternal_login_user(_api::UserApi, username::String, password::String; _mediaType=nothing)
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_login_user_UserApi, "/user/login", [])
-    OpenAPI.Clients.set_param(_ctx.query, "username", username)  # type String
-    OpenAPI.Clients.set_param(_ctx.query, "password", password)  # type String
+    OpenAPI.Clients.set_param(_ctx.query, "username", username; style="form", is_explode=true)  # type String
+    OpenAPI.Clients.set_param(_ctx.query, "password", password; style="form", is_explode=true)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/xml", "application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
diff --git a/test/client/petstore_v3/petstore/src/models/model_ApiResponse.jl b/test/client/petstore_v3/petstore/src/models/model_ApiResponse.jl
index 107fab6..1d6b413 100644
--- a/test/client/petstore_v3/petstore/src/models/model_ApiResponse.jl
+++ b/test/client/petstore_v3/petstore/src/models/model_ApiResponse.jl
@@ -21,22 +21,30 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
     message::Union{Nothing, String} = nothing
 
     function ApiResponse(code, type, message, )
-        OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
-        OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
-        OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
-        return new(code, type, message, )
+        o = new(code, type, message, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type ApiResponse
 
 const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("code")=>"Int64", Symbol("type")=>"String", Symbol("message")=>"String", )
 OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
 
-function check_required(o::ApiResponse)
+function OpenAPI.check_required(o::ApiResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::ApiResponse)
+    OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
+    OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
+    OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
+end
+
 function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
+
     if name === Symbol("code")
         OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32")
     end
+
+
 end
diff --git a/test/client/petstore_v3/petstore/src/models/model_Category.jl b/test/client/petstore_v3/petstore/src/models/model_Category.jl
index 90c8264..843d8a5 100644
--- a/test/client/petstore_v3/petstore/src/models/model_Category.jl
+++ b/test/client/petstore_v3/petstore/src/models/model_Category.jl
@@ -18,21 +18,28 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Category(id, name, )
-        OpenAPI.validate_property(Category, Symbol("id"), id)
-        OpenAPI.validate_property(Category, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Category
 
 const _property_types_Category = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
 
-function check_required(o::Category)
+function OpenAPI.check_required(o::Category)
     true
 end
 
+function OpenAPI.validate_properties(o::Category)
+    OpenAPI.validate_property(Category, Symbol("id"), o.id)
+    OpenAPI.validate_property(Category, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Category", :format, val, "int64")
     end
+
 end
diff --git a/test/client/petstore_v3/petstore/src/models/model_Order.jl b/test/client/petstore_v3/petstore/src/models/model_Order.jl
index 9443890..c1e95bc 100644
--- a/test/client/petstore_v3/petstore/src/models/model_Order.jl
+++ b/test/client/petstore_v3/petstore/src/models/model_Order.jl
@@ -30,37 +30,49 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
     complete::Union{Nothing, Bool} = false
 
     function Order(id, petId, quantity, shipDate, status, complete, )
-        OpenAPI.validate_property(Order, Symbol("id"), id)
-        OpenAPI.validate_property(Order, Symbol("petId"), petId)
-        OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
-        OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
-        OpenAPI.validate_property(Order, Symbol("status"), status)
-        OpenAPI.validate_property(Order, Symbol("complete"), complete)
-        return new(id, petId, quantity, shipDate, status, complete, )
+        o = new(id, petId, quantity, shipDate, status, complete, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Order
 
 const _property_types_Order = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("petId")=>"Int64", Symbol("quantity")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("complete")=>"Bool", )
 OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
 
-function check_required(o::Order)
+function OpenAPI.check_required(o::Order)
     true
 end
 
+function OpenAPI.validate_properties(o::Order)
+    OpenAPI.validate_property(Order, Symbol("id"), o.id)
+    OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
+    OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
+    OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
+    OpenAPI.validate_property(Order, Symbol("status"), o.status)
+    OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
+end
+
 function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("petId")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("quantity")
         OpenAPI.validate_param(name, "Order", :format, val, "int32")
     end
+
     if name === Symbol("shipDate")
         OpenAPI.validate_param(name, "Order", :format, val, "date-time")
     end
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"])
     end
+
+
 end
diff --git a/test/client/petstore_v3/petstore/src/models/model_Pet.jl b/test/client/petstore_v3/petstore/src/models/model_Pet.jl
index 569a932..47f8f83 100644
--- a/test/client/petstore_v3/petstore/src/models/model_Pet.jl
+++ b/test/client/petstore_v3/petstore/src/models/model_Pet.jl
@@ -30,30 +30,42 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     status::Union{Nothing, String} = nothing
 
     function Pet(id, category, name, photoUrls, tags, status, )
-        OpenAPI.validate_property(Pet, Symbol("id"), id)
-        OpenAPI.validate_property(Pet, Symbol("category"), category)
-        OpenAPI.validate_property(Pet, Symbol("name"), name)
-        OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
-        OpenAPI.validate_property(Pet, Symbol("tags"), tags)
-        OpenAPI.validate_property(Pet, Symbol("status"), status)
-        return new(id, category, name, photoUrls, tags, status, )
+        o = new(id, category, name, photoUrls, tags, status, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("category")=>"Category", Symbol("name")=>"String", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("status")=>"String", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.name === nothing && (return false)
     o.photoUrls === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("id"), o.id)
+    OpenAPI.validate_property(Pet, Symbol("category"), o.category)
+    OpenAPI.validate_property(Pet, Symbol("name"), o.name)
+    OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
+    OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
+    OpenAPI.validate_property(Pet, Symbol("status"), o.status)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Pet", :format, val, "int64")
     end
+
+
+
+
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"])
     end
+
 end
diff --git a/test/client/petstore_v3/petstore/src/models/model_Tag.jl b/test/client/petstore_v3/petstore/src/models/model_Tag.jl
index f717688..2743b59 100644
--- a/test/client/petstore_v3/petstore/src/models/model_Tag.jl
+++ b/test/client/petstore_v3/petstore/src/models/model_Tag.jl
@@ -18,21 +18,28 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Tag(id, name, )
-        OpenAPI.validate_property(Tag, Symbol("id"), id)
-        OpenAPI.validate_property(Tag, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Tag
 
 const _property_types_Tag = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
 
-function check_required(o::Tag)
+function OpenAPI.check_required(o::Tag)
     true
 end
 
+function OpenAPI.validate_properties(o::Tag)
+    OpenAPI.validate_property(Tag, Symbol("id"), o.id)
+    OpenAPI.validate_property(Tag, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Tag", :format, val, "int64")
     end
+
 end
diff --git a/test/client/petstore_v3/petstore/src/models/model_User.jl b/test/client/petstore_v3/petstore/src/models/model_User.jl
index 5af0ccd..8e95c9a 100644
--- a/test/client/petstore_v3/petstore/src/models/model_User.jl
+++ b/test/client/petstore_v3/petstore/src/models/model_User.jl
@@ -36,29 +36,42 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
     userStatus::Union{Nothing, Int64} = nothing
 
     function User(id, username, firstName, lastName, email, password, phone, userStatus, )
-        OpenAPI.validate_property(User, Symbol("id"), id)
-        OpenAPI.validate_property(User, Symbol("username"), username)
-        OpenAPI.validate_property(User, Symbol("firstName"), firstName)
-        OpenAPI.validate_property(User, Symbol("lastName"), lastName)
-        OpenAPI.validate_property(User, Symbol("email"), email)
-        OpenAPI.validate_property(User, Symbol("password"), password)
-        OpenAPI.validate_property(User, Symbol("phone"), phone)
-        OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
-        return new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        o = new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type User
 
 const _property_types_User = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("email")=>"String", Symbol("password")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", )
 OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
 
-function check_required(o::User)
+function OpenAPI.check_required(o::User)
     true
 end
 
+function OpenAPI.validate_properties(o::User)
+    OpenAPI.validate_property(User, Symbol("id"), o.id)
+    OpenAPI.validate_property(User, Symbol("username"), o.username)
+    OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
+    OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
+    OpenAPI.validate_property(User, Symbol("email"), o.email)
+    OpenAPI.validate_property(User, Symbol("password"), o.password)
+    OpenAPI.validate_property(User, Symbol("phone"), o.phone)
+    OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
+end
+
 function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "User", :format, val, "int64")
     end
+
+
+
+
+
+
+
     if name === Symbol("userStatus")
         OpenAPI.validate_param(name, "User", :format, val, "int32")
     end
diff --git a/test/client/petstore_v3/petstore_test_petapi.jl b/test/client/petstore_v3/petstore_test_petapi.jl
index 36d3a6f..fcd0781 100644
--- a/test/client/petstore_v3/petstore_test_petapi.jl
+++ b/test/client/petstore_v3/petstore_test_petapi.jl
@@ -17,7 +17,7 @@ function test(uri; test_file_upload=false)
 
     @test_throws OpenAPI.ValidationException Pet(;id=10, category=cat, name="felix", photoUrls=nothing, tags=[tag1, tag2], status="invalid-status")
 
-    pet = Pet(;id=10, category=cat, name="felix", photoUrls=nothing, tags=[tag1,tag2], status="pending")
+    pet = Pet(;id=10, category=cat, name="felix", photoUrls=["http://photo/1","http://photo/2"], tags=[tag1,tag2], status="pending")
 
     @info("PetApi - add_pet")
     api_return, http_resp = add_pet(api, pet)
diff --git a/test/client/petstore_v3/petstore_test_storeapi.jl b/test/client/petstore_v3/petstore_test_storeapi.jl
index 1aa7beb..e94cfa9 100644
--- a/test/client/petstore_v3/petstore_test_storeapi.jl
+++ b/test/client/petstore_v3/petstore_test_storeapi.jl
@@ -20,7 +20,7 @@ function test(uri)
     @test !isempty(inventory)
 
     @info("StoreApi - place_order")
-    @test_throws OpenAPI.ValidationException Order(; id=5, petId=10, quantity=2, shipDate=DateTime(2017, 03, 12), status="invalid_status", complete=false)
+    @test_throws OpenAPI.ValidationException Order(; id=5, petId=10, quantity=2, shipDate=ZonedDateTime(DateTime(2017, 03, 12), localzone()), status="invalid_status", complete=false)
     order = Order(; id=5, petId=10, quantity=2, shipDate=ZonedDateTime(DateTime(2017, 03, 12), localzone()), status="placed", complete=false)
     neworder, http_resp = place_order(api, order)
     @test http_resp.status == 200
diff --git a/test/client/timeouttest/TimeoutTestClient/.openapi-generator/FILES b/test/client/timeouttest/TimeoutTestClient/.openapi-generator/FILES
index cbc004f..7d2bf6b 100644
--- a/test/client/timeouttest/TimeoutTestClient/.openapi-generator/FILES
+++ b/test/client/timeouttest/TimeoutTestClient/.openapi-generator/FILES
@@ -1,4 +1,3 @@
-.openapi-generator-ignore
 README.md
 docs/DefaultApi.md
 docs/DelayresponseGet200Response.md
diff --git a/test/client/timeouttest/TimeoutTestClient/.openapi-generator/VERSION b/test/client/timeouttest/TimeoutTestClient/.openapi-generator/VERSION
index 4b49d9b..96cfbb1 100644
--- a/test/client/timeouttest/TimeoutTestClient/.openapi-generator/VERSION
+++ b/test/client/timeouttest/TimeoutTestClient/.openapi-generator/VERSION
@@ -1 +1 @@
-7.2.0
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/client/timeouttest/TimeoutTestClient/README.md b/test/client/timeouttest/TimeoutTestClient/README.md
index 4f1e662..0fcd6e1 100644
--- a/test/client/timeouttest/TimeoutTestClient/README.md
+++ b/test/client/timeouttest/TimeoutTestClient/README.md
@@ -6,6 +6,7 @@ No description provided (generated by Openapi Generator https://github.com/opena
 This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaClientCodegen
 
 
diff --git a/test/client/timeouttest/TimeoutTestClient/docs/DefaultApi.md b/test/client/timeouttest/TimeoutTestClient/docs/DefaultApi.md
index 74c4a60..67d2be8 100644
--- a/test/client/timeouttest/TimeoutTestClient/docs/DefaultApi.md
+++ b/test/client/timeouttest/TimeoutTestClient/docs/DefaultApi.md
@@ -18,7 +18,7 @@ Delay Response Endpoint
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**delay_seconds** | **Int64**| Number of seconds to delay the response | [default to nothing]
+**delay_seconds** | **Int64** | Number of seconds to delay the response |
 
 ### Return type
 
diff --git a/test/client/timeouttest/TimeoutTestClient/src/apis/api_DefaultApi.jl b/test/client/timeouttest/TimeoutTestClient/src/apis/api_DefaultApi.jl
index 3cf0a93..0b30be7 100644
--- a/test/client/timeouttest/TimeoutTestClient/src/apis/api_DefaultApi.jl
+++ b/test/client/timeouttest/TimeoutTestClient/src/apis/api_DefaultApi.jl
@@ -19,7 +19,7 @@ function _oacinternal_delayresponse_get(_api::DefaultApi, delay_seconds::Int64;
     OpenAPI.validate_param("delay_seconds", "delayresponse_get", :minimum, delay_seconds, 0, false)
 
     _ctx = OpenAPI.Clients.Ctx(_api.client, "GET", _returntypes_delayresponse_get_DefaultApi, "/delayresponse", [])
-    OpenAPI.Clients.set_param(_ctx.query, "delay_seconds", delay_seconds)  # type Int64
+    OpenAPI.Clients.set_param(_ctx.query, "delay_seconds", delay_seconds; style="form", is_explode=true)  # type Int64
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? [] : [_mediaType])
     return _ctx
diff --git a/test/client/timeouttest/TimeoutTestClient/src/models/model_DelayresponseGet200Response.jl b/test/client/timeouttest/TimeoutTestClient/src/models/model_DelayresponseGet200Response.jl
index c700d17..caa9121 100644
--- a/test/client/timeouttest/TimeoutTestClient/src/models/model_DelayresponseGet200Response.jl
+++ b/test/client/timeouttest/TimeoutTestClient/src/models/model_DelayresponseGet200Response.jl
@@ -14,17 +14,23 @@ Base.@kwdef mutable struct DelayresponseGet200Response <: OpenAPI.APIModel
     delay_seconds::Union{Nothing, String} = nothing
 
     function DelayresponseGet200Response(delay_seconds, )
-        OpenAPI.validate_property(DelayresponseGet200Response, Symbol("delay_seconds"), delay_seconds)
-        return new(delay_seconds, )
+        o = new(delay_seconds, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type DelayresponseGet200Response
 
 const _property_types_DelayresponseGet200Response = Dict{Symbol,String}(Symbol("delay_seconds")=>"String", )
 OpenAPI.property_type(::Type{ DelayresponseGet200Response }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_DelayresponseGet200Response[name]))}
 
-function check_required(o::DelayresponseGet200Response)
+function OpenAPI.check_required(o::DelayresponseGet200Response)
     true
 end
 
+function OpenAPI.validate_properties(o::DelayresponseGet200Response)
+    OpenAPI.validate_property(DelayresponseGet200Response, Symbol("delay_seconds"), o.delay_seconds)
+end
+
 function OpenAPI.validate_property(::Type{ DelayresponseGet200Response }, name::Symbol, val)
+
 end
diff --git a/test/forms/FormsClient/.openapi-generator/VERSION b/test/forms/FormsClient/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/forms/FormsClient/.openapi-generator/VERSION
+++ b/test/forms/FormsClient/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/forms/FormsClient/README.md b/test/forms/FormsClient/README.md
index cb5cd5f..b7cf708 100644
--- a/test/forms/FormsClient/README.md
+++ b/test/forms/FormsClient/README.md
@@ -6,6 +6,7 @@ Tests for different types of POST operations with forms and file uploads
 This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 0.1.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaClientCodegen
 
 
diff --git a/test/forms/FormsClient/docs/DefaultApi.md b/test/forms/FormsClient/docs/DefaultApi.md
index 764a7e3..9101942 100644
--- a/test/forms/FormsClient/docs/DefaultApi.md
+++ b/test/forms/FormsClient/docs/DefaultApi.md
@@ -20,14 +20,14 @@ posts a urlencoded form, with file contents and additional metadata, both of whi
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**form_id** | **Int64**| ID of form to update | [default to nothing]
-**file** | **String**| file contents to upload, in string format | [default to nothing]
+**form_id** | **Int64** | ID of form to update |
+**file** | **String** | file contents to upload, in string format |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
+ **additional_metadata** | **String** | Additional data to pass to server | [default to nothing]
 
 ### Return type
 
@@ -55,14 +55,14 @@ uploads a binary file given its path, along with some metadata
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**file_id** | **Int64**| ID of file to update | [default to nothing]
+**file_id** | **Int64** | ID of file to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
- **file** | **String****String**| file to upload, must be a string representing a valid file path | [default to nothing]
+ **additional_metadata** | **String** | Additional data to pass to server | [default to nothing]
+ **file** | **String** | file to upload, must be a string representing a valid file path | 
 
 ### Return type
 
@@ -90,14 +90,14 @@ uploads text file contents along with some metadata
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **_api** | **DefaultApi** | API context | 
-**file_id** | **Int64**| ID of file to update | [default to nothing]
+**file_id** | **Int64** | ID of file to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **additional_metadata** | **String**| Additional data to pass to server, a string | [default to nothing]
- **file** | **String**| file contents to upload in base64 encoded format | [default to nothing]
+ **additional_metadata** | **String** | Additional data to pass to server, a string | [default to nothing]
+ **file** | **String** | file contents to upload in base64 encoded format | [default to nothing]
 
 ### Return type
 
diff --git a/test/forms/FormsClient/src/apis/api_DefaultApi.jl b/test/forms/FormsClient/src/apis/api_DefaultApi.jl
index 2bd6a3a..e937581 100644
--- a/test/forms/FormsClient/src/apis/api_DefaultApi.jl
+++ b/test/forms/FormsClient/src/apis/api_DefaultApi.jl
@@ -52,7 +52,7 @@ function _oacinternal_upload_binary_file(_api::DefaultApi, file_id::Int64; addit
     _ctx = OpenAPI.Clients.Ctx(_api.client, "POST", _returntypes_upload_binary_file_DefaultApi, "/test/{file_id}/upload_binary_file", [])
     OpenAPI.Clients.set_param(_ctx.path, "file_id", file_id)  # type Int64
     OpenAPI.Clients.set_param(_ctx.form, "additionalMetadata", additional_metadata)  # type String
-    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type Vector{UInt8}
+    OpenAPI.Clients.set_param(_ctx.file, "file", file)  # type String
     OpenAPI.Clients.set_header_accept(_ctx, ["application/json", ])
     OpenAPI.Clients.set_header_content_type(_ctx, (_mediaType === nothing) ? ["multipart/form-data", ] : [_mediaType])
     return _ctx
diff --git a/test/forms/FormsClient/src/models/model_TestResponse.jl b/test/forms/FormsClient/src/models/model_TestResponse.jl
index 285549d..a7dfca7 100644
--- a/test/forms/FormsClient/src/models/model_TestResponse.jl
+++ b/test/forms/FormsClient/src/models/model_TestResponse.jl
@@ -14,17 +14,23 @@ Base.@kwdef mutable struct TestResponse <: OpenAPI.APIModel
     message::Union{Nothing, String} = nothing
 
     function TestResponse(message, )
-        OpenAPI.validate_property(TestResponse, Symbol("message"), message)
-        return new(message, )
+        o = new(message, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type TestResponse
 
 const _property_types_TestResponse = Dict{Symbol,String}(Symbol("message")=>"String", )
 OpenAPI.property_type(::Type{ TestResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_TestResponse[name]))}
 
-function check_required(o::TestResponse)
+function OpenAPI.check_required(o::TestResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::TestResponse)
+    OpenAPI.validate_property(TestResponse, Symbol("message"), o.message)
+end
+
 function OpenAPI.validate_property(::Type{ TestResponse }, name::Symbol, val)
+
 end
diff --git a/test/forms/FormsServer/.openapi-generator/VERSION b/test/forms/FormsServer/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/forms/FormsServer/.openapi-generator/VERSION
+++ b/test/forms/FormsServer/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/forms/FormsServer/README.md b/test/forms/FormsServer/README.md
index 2af8cc0..b287034 100644
--- a/test/forms/FormsServer/README.md
+++ b/test/forms/FormsServer/README.md
@@ -6,6 +6,7 @@ Tests for different types of POST operations with forms and file uploads
 This API server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 0.1.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaServerCodegen
 
 
diff --git a/test/forms/FormsServer/docs/DefaultApi.md b/test/forms/FormsServer/docs/DefaultApi.md
index d118965..b677d84 100644
--- a/test/forms/FormsServer/docs/DefaultApi.md
+++ b/test/forms/FormsServer/docs/DefaultApi.md
@@ -19,8 +19,8 @@ posts a urlencoded form, with file contents and additional metadata, both of whi
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**form_id** | **Int64**| ID of form to update | [default to nothing]
-**file** | **String**| file contents to upload, in string format | [default to nothing]
+**form_id** | **Int64**| ID of form to update |
+**file** | **String**| file contents to upload, in string format |
 
 ### Optional Parameters
 
@@ -53,14 +53,14 @@ uploads a binary file given its path, along with some metadata
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**file_id** | **Int64**| ID of file to update | [default to nothing]
+**file_id** | **Int64**| ID of file to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
- **file** | **String****String**| file to upload, must be a string representing a valid file path | [default to nothing]
+ **file** | **Vector{UInt8}**| file to upload, must be a string representing a valid file path | 
 
 ### Return type
 
@@ -87,7 +87,7 @@ uploads text file contents along with some metadata
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**file_id** | **Int64**| ID of file to update | [default to nothing]
+**file_id** | **Int64**| ID of file to update |
 
 ### Optional Parameters
 
diff --git a/test/forms/FormsServer/src/apis/api_DefaultApi.jl b/test/forms/FormsServer/src/apis/api_DefaultApi.jl
index aabb0af..8290a13 100644
--- a/test/forms/FormsServer/src/apis/api_DefaultApi.jl
+++ b/test/forms/FormsServer/src/apis/api_DefaultApi.jl
@@ -20,7 +20,43 @@ end
 function post_urlencoded_form_validate(handler)
     function post_urlencoded_form_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "post_urlencoded_form"
         
+        n = "form_id"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "file"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "additionalMetadata"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -52,7 +88,42 @@ end
 function upload_binary_file_validate(handler)
     function upload_binary_file_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "upload_binary_file"
+        
+        n = "file_id"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "additionalMetadata"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
         
+        n = "file"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -84,7 +155,42 @@ end
 function upload_text_file_validate(handler)
     function upload_text_file_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "upload_text_file"
+        
+        n = "file_id"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
         
+        n = "additionalMetadata"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "file"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/forms/FormsServer/src/models/model_TestResponse.jl b/test/forms/FormsServer/src/models/model_TestResponse.jl
index 285549d..a7dfca7 100644
--- a/test/forms/FormsServer/src/models/model_TestResponse.jl
+++ b/test/forms/FormsServer/src/models/model_TestResponse.jl
@@ -14,17 +14,23 @@ Base.@kwdef mutable struct TestResponse <: OpenAPI.APIModel
     message::Union{Nothing, String} = nothing
 
     function TestResponse(message, )
-        OpenAPI.validate_property(TestResponse, Symbol("message"), message)
-        return new(message, )
+        o = new(message, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type TestResponse
 
 const _property_types_TestResponse = Dict{Symbol,String}(Symbol("message")=>"String", )
 OpenAPI.property_type(::Type{ TestResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_TestResponse[name]))}
 
-function check_required(o::TestResponse)
+function OpenAPI.check_required(o::TestResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::TestResponse)
+    OpenAPI.validate_property(TestResponse, Symbol("message"), o.message)
+end
+
 function OpenAPI.validate_property(::Type{ TestResponse }, name::Symbol, val)
+
 end
diff --git a/test/server/allany/AllAnyServer/.openapi-generator/VERSION b/test/server/allany/AllAnyServer/.openapi-generator/VERSION
index 44bad91..96cfbb1 100644
--- a/test/server/allany/AllAnyServer/.openapi-generator/VERSION
+++ b/test/server/allany/AllAnyServer/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.1-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/server/allany/AllAnyServer/README.md b/test/server/allany/AllAnyServer/README.md
index b7456c3..0111a58 100644
--- a/test/server/allany/AllAnyServer/README.md
+++ b/test/server/allany/AllAnyServer/README.md
@@ -6,6 +6,7 @@ API to test code generation for oneof anyof allof
 This API server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 0.0.1
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaServerCodegen
 
 
diff --git a/test/server/allany/AllAnyServer/docs/DefaultApi.md b/test/server/allany/AllAnyServer/docs/DefaultApi.md
index 1b7bb3c..a3d457a 100644
--- a/test/server/allany/AllAnyServer/docs/DefaultApi.md
+++ b/test/server/allany/AllAnyServer/docs/DefaultApi.md
@@ -23,7 +23,7 @@ Method | HTTP request | Description
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**any_of_base_type** | [**AnyOfBaseType**](AnyOfBaseType.md)|  | 
+**any_of_base_type** | [**AnyOfBaseType**](AnyOfBaseType.md)|  |
 
 ### Return type
 
@@ -50,7 +50,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**any_of_mapped_pets** | [**AnyOfMappedPets**](AnyOfMappedPets.md)|  | 
+**any_of_mapped_pets** | [**AnyOfMappedPets**](AnyOfMappedPets.md)|  |
 
 ### Return type
 
@@ -77,7 +77,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**any_of_pets** | [**AnyOfPets**](AnyOfPets.md)|  | 
+**any_of_pets** | [**AnyOfPets**](AnyOfPets.md)|  |
 
 ### Return type
 
@@ -104,7 +104,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**type_with_all_array_types** | [**TypeWithAllArrayTypes**](TypeWithAllArrayTypes.md)|  | 
+**type_with_all_array_types** | [**TypeWithAllArrayTypes**](TypeWithAllArrayTypes.md)|  |
 
 ### Return type
 
@@ -131,7 +131,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**one_of_base_type** | [**OneOfBaseType**](OneOfBaseType.md)|  | 
+**one_of_base_type** | [**OneOfBaseType**](OneOfBaseType.md)|  |
 
 ### Return type
 
@@ -158,7 +158,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**one_of_mapped_pets** | [**OneOfMappedPets**](OneOfMappedPets.md)|  | 
+**one_of_mapped_pets** | [**OneOfMappedPets**](OneOfMappedPets.md)|  |
 
 ### Return type
 
@@ -185,7 +185,7 @@ No authorization required
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**one_of_pets** | [**OneOfPets**](OneOfPets.md)|  | 
+**one_of_pets** | [**OneOfPets**](OneOfPets.md)|  |
 
 ### Return type
 
diff --git a/test/server/allany/AllAnyServer/src/apis/api_DefaultApi.jl b/test/server/allany/AllAnyServer/src/apis/api_DefaultApi.jl
index 2831204..d4fba67 100644
--- a/test/server/allany/AllAnyServer/src/apis/api_DefaultApi.jl
+++ b/test/server/allany/AllAnyServer/src/apis/api_DefaultApi.jl
@@ -15,7 +15,20 @@ end
 function echo_anyof_base_type_post_validate(handler)
     function echo_anyof_base_type_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_anyof_base_type_post"
         
+        n = "AnyOfBaseType"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -42,7 +55,20 @@ end
 function echo_anyof_mapped_pets_post_validate(handler)
     function echo_anyof_mapped_pets_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_anyof_mapped_pets_post"
         
+        n = "AnyOfMappedPets"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -69,7 +95,20 @@ end
 function echo_anyof_pets_post_validate(handler)
     function echo_anyof_pets_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_anyof_pets_post"
         
+        n = "AnyOfPets"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -96,7 +135,20 @@ end
 function echo_arrays_post_validate(handler)
     function echo_arrays_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_arrays_post"
         
+        n = "TypeWithAllArrayTypes"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -104,7 +156,7 @@ end
 function echo_arrays_post_invoke(impl; post_invoke=nothing)
     function echo_arrays_post_invoke_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        ret = impl.echo_arrays_post(req::HTTP.Request, openapi_params["TypeWithAllArrayTypes"];)    
+        ret = impl.echo_arrays_post(req::HTTP.Request, openapi_params["TypeWithAllArrayTypes"];)
         resp = OpenAPI.Servers.server_response(ret)
         return (post_invoke === nothing) ? resp : post_invoke(req, resp)
     end
@@ -123,7 +175,20 @@ end
 function echo_oneof_base_type_post_validate(handler)
     function echo_oneof_base_type_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_oneof_base_type_post"
         
+        n = "OneOfBaseType"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -150,7 +215,20 @@ end
 function echo_oneof_mapped_pets_post_validate(handler)
     function echo_oneof_mapped_pets_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_oneof_mapped_pets_post"
         
+        n = "OneOfMappedPets"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -177,7 +255,20 @@ end
 function echo_oneof_pets_post_validate(handler)
     function echo_oneof_pets_post_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "echo_oneof_pets_post"
         
+        n = "OneOfPets"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/allany/AllAnyServer/src/models/model_Cat.jl b/test/server/allany/AllAnyServer/src/models/model_Cat.jl
index d4230b9..1f720cf 100644
--- a/test/server/allany/AllAnyServer/src/models/model_Cat.jl
+++ b/test/server/allany/AllAnyServer/src/models/model_Cat.jl
@@ -20,20 +20,28 @@ Base.@kwdef mutable struct Cat <: OpenAPI.APIModel
     age::Union{Nothing, Int64} = nothing
 
     function Cat(pet_type, hunts, age, )
-        OpenAPI.validate_property(Cat, Symbol("pet_type"), pet_type)
-        OpenAPI.validate_property(Cat, Symbol("hunts"), hunts)
-        OpenAPI.validate_property(Cat, Symbol("age"), age)
-        return new(pet_type, hunts, age, )
+        o = new(pet_type, hunts, age, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Cat
 
 const _property_types_Cat = Dict{Symbol,String}(Symbol("pet_type")=>"String", Symbol("hunts")=>"Bool", Symbol("age")=>"Int64", )
 OpenAPI.property_type(::Type{ Cat }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Cat[name]))}
 
-function check_required(o::Cat)
+function OpenAPI.check_required(o::Cat)
     o.pet_type === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Cat)
+    OpenAPI.validate_property(Cat, Symbol("pet_type"), o.pet_type)
+    OpenAPI.validate_property(Cat, Symbol("hunts"), o.hunts)
+    OpenAPI.validate_property(Cat, Symbol("age"), o.age)
+end
+
 function OpenAPI.validate_property(::Type{ Cat }, name::Symbol, val)
+
+
+
 end
diff --git a/test/server/allany/AllAnyServer/src/models/model_Dog.jl b/test/server/allany/AllAnyServer/src/models/model_Dog.jl
index 8af93c8..c5ac6b9 100644
--- a/test/server/allany/AllAnyServer/src/models/model_Dog.jl
+++ b/test/server/allany/AllAnyServer/src/models/model_Dog.jl
@@ -20,23 +20,32 @@ Base.@kwdef mutable struct Dog <: OpenAPI.APIModel
     breed::Union{Nothing, String} = nothing
 
     function Dog(pet_type, bark, breed, )
-        OpenAPI.validate_property(Dog, Symbol("pet_type"), pet_type)
-        OpenAPI.validate_property(Dog, Symbol("bark"), bark)
-        OpenAPI.validate_property(Dog, Symbol("breed"), breed)
-        return new(pet_type, bark, breed, )
+        o = new(pet_type, bark, breed, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Dog
 
 const _property_types_Dog = Dict{Symbol,String}(Symbol("pet_type")=>"String", Symbol("bark")=>"Bool", Symbol("breed")=>"String", )
 OpenAPI.property_type(::Type{ Dog }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Dog[name]))}
 
-function check_required(o::Dog)
+function OpenAPI.check_required(o::Dog)
     o.pet_type === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Dog)
+    OpenAPI.validate_property(Dog, Symbol("pet_type"), o.pet_type)
+    OpenAPI.validate_property(Dog, Symbol("bark"), o.bark)
+    OpenAPI.validate_property(Dog, Symbol("breed"), o.breed)
+end
+
 function OpenAPI.validate_property(::Type{ Dog }, name::Symbol, val)
+
+
+
     if name === Symbol("breed")
         OpenAPI.validate_param(name, "Dog", :enum, val, ["Dingo", "Husky", "Retriever", "Shepherd"])
     end
+
 end
diff --git a/test/server/allany/AllAnyServer/src/models/model_Pet.jl b/test/server/allany/AllAnyServer/src/models/model_Pet.jl
index f9dcf1f..e95c0d4 100644
--- a/test/server/allany/AllAnyServer/src/models/model_Pet.jl
+++ b/test/server/allany/AllAnyServer/src/models/model_Pet.jl
@@ -14,18 +14,24 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     pet_type::Union{Nothing, String} = nothing
 
     function Pet(pet_type, )
-        OpenAPI.validate_property(Pet, Symbol("pet_type"), pet_type)
-        return new(pet_type, )
+        o = new(pet_type, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("pet_type")=>"String", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.pet_type === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("pet_type"), o.pet_type)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
 end
diff --git a/test/server/allany/AllAnyServer/src/models/model_TypeWithAllArrayTypes.jl b/test/server/allany/AllAnyServer/src/models/model_TypeWithAllArrayTypes.jl
index e781139..5236187 100644
--- a/test/server/allany/AllAnyServer/src/models/model_TypeWithAllArrayTypes.jl
+++ b/test/server/allany/AllAnyServer/src/models/model_TypeWithAllArrayTypes.jl
@@ -23,20 +23,29 @@ Base.@kwdef mutable struct TypeWithAllArrayTypes <: OpenAPI.APIModel
     anyofpets::Union{Nothing, Vector} = nothing # spec type: Union{ Nothing, Vector{AnyOfPets} }
 
     function TypeWithAllArrayTypes(oneofbase, anyofbase, oneofpets, anyofpets, )
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofbase"), oneofbase)
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofbase"), anyofbase)
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofpets"), oneofpets)
-        OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofpets"), anyofpets)
-        return new(oneofbase, anyofbase, oneofpets, anyofpets, )
+        o = new(oneofbase, anyofbase, oneofpets, anyofpets, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type TypeWithAllArrayTypes
 
 const _property_types_TypeWithAllArrayTypes = Dict{Symbol,String}(Symbol("oneofbase")=>"Vector{OneOfBaseType}", Symbol("anyofbase")=>"Vector{AnyOfBaseType}", Symbol("oneofpets")=>"Vector{OneOfPets}", Symbol("anyofpets")=>"Vector{AnyOfPets}", )
 OpenAPI.property_type(::Type{ TypeWithAllArrayTypes }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_TypeWithAllArrayTypes[name]))}
 
-function check_required(o::TypeWithAllArrayTypes)
+function OpenAPI.check_required(o::TypeWithAllArrayTypes)
     true
 end
 
+function OpenAPI.validate_properties(o::TypeWithAllArrayTypes)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofbase"), o.oneofbase)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofbase"), o.anyofbase)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("oneofpets"), o.oneofpets)
+    OpenAPI.validate_property(TypeWithAllArrayTypes, Symbol("anyofpets"), o.anyofpets)
+end
+
 function OpenAPI.validate_property(::Type{ TypeWithAllArrayTypes }, name::Symbol, val)
+
+
+
+
 end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION b/test/server/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION
+++ b/test/server/openapigenerator_petstore_v3/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/server/openapigenerator_petstore_v3/petstore/README.md b/test/server/openapigenerator_petstore_v3/petstore/README.md
index 37e15b3..87a8bcf 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/README.md
+++ b/test/server/openapigenerator_petstore_v3/petstore/README.md
@@ -6,6 +6,7 @@ This is a sample server Petstore server. For this sample, you can use the api ke
 This API server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaServerCodegen
 
 
diff --git a/test/server/openapigenerator_petstore_v3/petstore/docs/PetApi.md b/test/server/openapigenerator_petstore_v3/petstore/docs/PetApi.md
index 8803bc4..655746e 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/docs/PetApi.md
+++ b/test/server/openapigenerator_petstore_v3/petstore/docs/PetApi.md
@@ -26,7 +26,7 @@ Add a new pet to the store
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -55,7 +55,7 @@ Deletes a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| Pet id to delete | [default to nothing]
+**pet_id** | **Int64**| Pet id to delete |
 
 ### Optional Parameters
 
@@ -90,7 +90,7 @@ Multiple status values can be provided with comma separated strings
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter | [default to nothing]
+**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter |
 
 ### Return type
 
@@ -119,7 +119,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**tags** | [**Vector{String}**](String.md)| Tags to filter by | [default to nothing]
+**tags** | [**Vector{String}**](String.md)| Tags to filter by |
 
 ### Return type
 
@@ -148,7 +148,7 @@ Returns a single pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet to return | [default to nothing]
+**pet_id** | **Int64**| ID of pet to return |
 
 ### Return type
 
@@ -177,7 +177,7 @@ Update an existing pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -206,7 +206,7 @@ Updates a pet in the store with form data
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet that needs to be updated | [default to nothing]
+**pet_id** | **Int64**| ID of pet that needs to be updated |
 
 ### Optional Parameters
 
@@ -242,13 +242,13 @@ uploads an image
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet to update | [default to nothing]
+**pet_id** | **Int64**| ID of pet to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
- **file** | **String****String**| file to upload | [default to nothing]
+ **file** | **Vector{UInt8}**| file to upload | 
  **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
 
 ### Return type
diff --git a/test/server/openapigenerator_petstore_v3/petstore/docs/StoreApi.md b/test/server/openapigenerator_petstore_v3/petstore/docs/StoreApi.md
index acd3cc5..e64ce54 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/docs/StoreApi.md
+++ b/test/server/openapigenerator_petstore_v3/petstore/docs/StoreApi.md
@@ -22,7 +22,7 @@ For valid response try integer IDs with value < 1000. Anything above 1000 or non
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order_id** | **String**| ID of the order that needs to be deleted | [default to nothing]
+**order_id** | **String**| ID of the order that needs to be deleted |
 
 ### Return type
 
@@ -76,7 +76,7 @@ For valid response try integer IDs with value <= 5 or > 10. Other values will ge
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order_id** | **Int64**| ID of pet that needs to be fetched | [default to nothing]
+**order_id** | **Int64**| ID of pet that needs to be fetched |
 
 ### Return type
 
@@ -105,7 +105,7 @@ Place an order for a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order** | [**Order**](Order.md)| order placed for purchasing the pet | 
+**order** | [**Order**](Order.md)| order placed for purchasing the pet |
 
 ### Return type
 
diff --git a/test/server/openapigenerator_petstore_v3/petstore/docs/UserApi.md b/test/server/openapigenerator_petstore_v3/petstore/docs/UserApi.md
index 6f8cbb3..49afb18 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/docs/UserApi.md
+++ b/test/server/openapigenerator_petstore_v3/petstore/docs/UserApi.md
@@ -26,7 +26,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**user** | [**User**](User.md)| Created user object | 
+**user** | [**User**](User.md)| Created user object |
 
 ### Return type
 
@@ -55,7 +55,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md)| List of user object |
 
 ### Return type
 
@@ -84,7 +84,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md)| List of user object |
 
 ### Return type
 
@@ -113,7 +113,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The name that needs to be deleted | [default to nothing]
+**username** | **String**| The name that needs to be deleted |
 
 ### Return type
 
@@ -142,7 +142,7 @@ Get user by user name
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The name that needs to be fetched. Use user1 for testing. | [default to nothing]
+**username** | **String**| The name that needs to be fetched. Use user1 for testing. |
 
 ### Return type
 
@@ -171,8 +171,8 @@ Logs user into the system
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The user name for login | [default to nothing]
-**password** | **String**| The password for login in clear text | [default to nothing]
+**username** | **String**| The user name for login |
+**password** | **String**| The password for login in clear text |
 
 ### Return type
 
@@ -226,8 +226,8 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| name that need to be deleted | [default to nothing]
-**user** | [**User**](User.md)| Updated user object | 
+**username** | **String**| name that need to be deleted |
+**user** | [**User**](User.md)| Updated user object |
 
 ### Return type
 
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl b/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl
index 9484444..861be59 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_PetApi.jl
@@ -15,7 +15,20 @@ end
 function add_pet_validate(handler)
     function add_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "add_pet"
         
+        n = "Pet"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -45,7 +58,31 @@ end
 function delete_pet_validate(handler)
     function delete_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_pet"
+        
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
         
+        n = "api_key"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -63,7 +100,7 @@ function find_pets_by_status_read(handler)
     function find_pets_by_status_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["status"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "status", required=true, )
+        openapi_params["status"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "status", required=true, style="form", is_explode=false)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -73,7 +110,20 @@ end
 function find_pets_by_status_validate(handler)
     function find_pets_by_status_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "find_pets_by_status"
         
+        n = "status"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -91,7 +141,7 @@ function find_pets_by_tags_read(handler)
     function find_pets_by_tags_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["tags"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "tags", required=true, )
+        openapi_params["tags"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "tags", required=true, style="form", is_explode=false)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -101,7 +151,20 @@ end
 function find_pets_by_tags_validate(handler)
     function find_pets_by_tags_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "find_pets_by_tags"
         
+        n = "tags"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -129,7 +192,20 @@ end
 function get_pet_by_id_validate(handler)
     function get_pet_by_id_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_pet_by_id"
         
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -156,7 +232,20 @@ end
 function update_pet_validate(handler)
     function update_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_pet"
         
+        n = "Pet"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -188,7 +277,42 @@ end
 function update_pet_with_form_validate(handler)
     function update_pet_with_form_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_pet_with_form"
         
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "name"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "status"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -220,7 +344,42 @@ end
 function upload_file_validate(handler)
     function upload_file_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "upload_file"
         
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "file"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "additionalMetadata"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_StoreApi.jl b/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_StoreApi.jl
index b982905..4a8b69f 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_StoreApi.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_StoreApi.jl
@@ -16,7 +16,20 @@ end
 function delete_order_validate(handler)
     function delete_order_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_order"
         
+        n = "orderId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -42,7 +55,8 @@ end
 function get_inventory_validate(handler)
     function get_inventory_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        
+        op = "get_inventory"
+
         return handler(req)
     end
 end
@@ -70,10 +84,16 @@ end
 function get_order_by_id_validate(handler)
     function get_order_by_id_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_order_by_id"
         
-        OpenAPI.validate_param("orderId", "get_order_by_id", :maximum, openapi_params["orderId"], 5, false)
-        OpenAPI.validate_param("orderId", "get_order_by_id", :minimum, openapi_params["orderId"], 1, false)
-        
+        n = "orderId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            OpenAPI.validate_param(n, op, :maximum, v, 5, false)
+            OpenAPI.validate_param(n, op, :minimum, v, 1, false)
+        end
+
         return handler(req)
     end
 end
@@ -100,7 +120,20 @@ end
 function place_order_validate(handler)
     function place_order_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "place_order"
         
+        n = "Order"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl b/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl
index f8033b3..65f5cdd 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/apis/api_UserApi.jl
@@ -15,7 +15,20 @@ end
 function create_user_validate(handler)
     function create_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_user"
         
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -42,7 +55,20 @@ end
 function create_users_with_array_input_validate(handler)
     function create_users_with_array_input_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_users_with_array_input"
         
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -69,7 +95,20 @@ end
 function create_users_with_list_input_validate(handler)
     function create_users_with_list_input_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_users_with_list_input"
         
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -97,7 +136,20 @@ end
 function delete_user_validate(handler)
     function delete_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -125,7 +177,20 @@ end
 function get_user_by_name_validate(handler)
     function get_user_by_name_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_user_by_name"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -143,8 +208,8 @@ function login_user_read(handler)
     function login_user_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["username"] = OpenAPI.Servers.to_param(String, query_params, "username", required=true, )
-        openapi_params["password"] = OpenAPI.Servers.to_param(String, query_params, "password", required=true, )
+        openapi_params["username"] = OpenAPI.Servers.to_param(String, query_params, "username", required=true, style="form", is_explode=true)
+        openapi_params["password"] = OpenAPI.Servers.to_param(String, query_params, "password", required=true, style="form", is_explode=true)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -154,8 +219,27 @@ end
 function login_user_validate(handler)
     function login_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "login_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            OpenAPI.validate_param(n, op, :pattern, v, r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$")
+        end
         
+        n = "password"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -181,7 +265,8 @@ end
 function logout_user_validate(handler)
     function logout_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        
+        op = "logout_user"
+
         return handler(req)
     end
 end
@@ -210,7 +295,32 @@ end
 function update_user_validate(handler)
     function update_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl
index e19464b..80cfeac 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_ApiResponse.jl
@@ -21,22 +21,30 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
     type::Union{Nothing, String} = nothing
 
     function ApiResponse(message, code, type, )
-        OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
-        OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
-        OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
-        return new(message, code, type, )
+        o = new(message, code, type, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type ApiResponse
 
 const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("message")=>"String", Symbol("code")=>"Int64", Symbol("type")=>"String", )
 OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
 
-function check_required(o::ApiResponse)
+function OpenAPI.check_required(o::ApiResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::ApiResponse)
+    OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
+    OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
+    OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
+end
+
 function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
+
+
     if name === Symbol("code")
         OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32")
     end
+
 end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl
index 5224efb..53e027a 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Category.jl
@@ -18,23 +18,30 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
     id::Union{Nothing, Int64} = nothing
 
     function Category(name, id, )
-        OpenAPI.validate_property(Category, Symbol("name"), name)
-        OpenAPI.validate_property(Category, Symbol("id"), id)
-        return new(name, id, )
+        o = new(name, id, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Category
 
 const _property_types_Category = Dict{Symbol,String}(Symbol("name")=>"String", Symbol("id")=>"Int64", )
 OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
 
-function check_required(o::Category)
+function OpenAPI.check_required(o::Category)
     true
 end
 
+function OpenAPI.validate_properties(o::Category)
+    OpenAPI.validate_property(Category, Symbol("name"), o.name)
+    OpenAPI.validate_property(Category, Symbol("id"), o.id)
+end
+
 function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
+
     if name === Symbol("name")
         OpenAPI.validate_param(name, "Category", :pattern, val, r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$")
     end
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Category", :format, val, "int64")
     end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl
index da94163..da6c81e 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Order.jl
@@ -30,36 +30,48 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
     quantity::Union{Nothing, Int64} = nothing
 
     function Order(petId, shipDate, status, id, complete, quantity, )
-        OpenAPI.validate_property(Order, Symbol("petId"), petId)
-        OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
-        OpenAPI.validate_property(Order, Symbol("status"), status)
-        OpenAPI.validate_property(Order, Symbol("id"), id)
-        OpenAPI.validate_property(Order, Symbol("complete"), complete)
-        OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
-        return new(petId, shipDate, status, id, complete, quantity, )
+        o = new(petId, shipDate, status, id, complete, quantity, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Order
 
 const _property_types_Order = Dict{Symbol,String}(Symbol("petId")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("id")=>"Int64", Symbol("complete")=>"Bool", Symbol("quantity")=>"Int64", )
 OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
 
-function check_required(o::Order)
+function OpenAPI.check_required(o::Order)
     true
 end
 
+function OpenAPI.validate_properties(o::Order)
+    OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
+    OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
+    OpenAPI.validate_property(Order, Symbol("status"), o.status)
+    OpenAPI.validate_property(Order, Symbol("id"), o.id)
+    OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
+    OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
+end
+
 function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
+
     if name === Symbol("petId")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("shipDate")
         OpenAPI.validate_param(name, "Order", :format, val, "date-time")
     end
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"])
     end
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
+
     if name === Symbol("quantity")
         OpenAPI.validate_param(name, "Order", :format, val, "int32")
     end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl
index 2b4069f..9b30f64 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Pet.jl
@@ -30,30 +30,42 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     category = nothing # spec type: Union{ Nothing, Category }
 
     function Pet(name, status, id, photoUrls, tags, category, )
-        OpenAPI.validate_property(Pet, Symbol("name"), name)
-        OpenAPI.validate_property(Pet, Symbol("status"), status)
-        OpenAPI.validate_property(Pet, Symbol("id"), id)
-        OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
-        OpenAPI.validate_property(Pet, Symbol("tags"), tags)
-        OpenAPI.validate_property(Pet, Symbol("category"), category)
-        return new(name, status, id, photoUrls, tags, category, )
+        o = new(name, status, id, photoUrls, tags, category, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("name")=>"String", Symbol("status")=>"String", Symbol("id")=>"Int64", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("category")=>"Category", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.name === nothing && (return false)
     o.photoUrls === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("name"), o.name)
+    OpenAPI.validate_property(Pet, Symbol("status"), o.status)
+    OpenAPI.validate_property(Pet, Symbol("id"), o.id)
+    OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
+    OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
+    OpenAPI.validate_property(Pet, Symbol("category"), o.category)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"])
     end
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Pet", :format, val, "int64")
     end
+
+
+
 end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl
index f3410e8..0550acc 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_Tag.jl
@@ -18,20 +18,27 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
     id::Union{Nothing, Int64} = nothing
 
     function Tag(name, id, )
-        OpenAPI.validate_property(Tag, Symbol("name"), name)
-        OpenAPI.validate_property(Tag, Symbol("id"), id)
-        return new(name, id, )
+        o = new(name, id, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Tag
 
 const _property_types_Tag = Dict{Symbol,String}(Symbol("name")=>"String", Symbol("id")=>"Int64", )
 OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
 
-function check_required(o::Tag)
+function OpenAPI.check_required(o::Tag)
     true
 end
 
+function OpenAPI.validate_properties(o::Tag)
+    OpenAPI.validate_property(Tag, Symbol("name"), o.name)
+    OpenAPI.validate_property(Tag, Symbol("id"), o.id)
+end
+
 function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Tag", :format, val, "int64")
     end
diff --git a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_User.jl b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_User.jl
index 0572483..95e836a 100644
--- a/test/server/openapigenerator_petstore_v3/petstore/src/models/model_User.jl
+++ b/test/server/openapigenerator_petstore_v3/petstore/src/models/model_User.jl
@@ -36,30 +36,43 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
     email::Union{Nothing, String} = nothing
 
     function User(password, id, username, firstName, lastName, phone, userStatus, email, )
-        OpenAPI.validate_property(User, Symbol("password"), password)
-        OpenAPI.validate_property(User, Symbol("id"), id)
-        OpenAPI.validate_property(User, Symbol("username"), username)
-        OpenAPI.validate_property(User, Symbol("firstName"), firstName)
-        OpenAPI.validate_property(User, Symbol("lastName"), lastName)
-        OpenAPI.validate_property(User, Symbol("phone"), phone)
-        OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
-        OpenAPI.validate_property(User, Symbol("email"), email)
-        return new(password, id, username, firstName, lastName, phone, userStatus, email, )
+        o = new(password, id, username, firstName, lastName, phone, userStatus, email, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type User
 
 const _property_types_User = Dict{Symbol,String}(Symbol("password")=>"String", Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", Symbol("email")=>"String", )
 OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
 
-function check_required(o::User)
+function OpenAPI.check_required(o::User)
     true
 end
 
+function OpenAPI.validate_properties(o::User)
+    OpenAPI.validate_property(User, Symbol("password"), o.password)
+    OpenAPI.validate_property(User, Symbol("id"), o.id)
+    OpenAPI.validate_property(User, Symbol("username"), o.username)
+    OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
+    OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
+    OpenAPI.validate_property(User, Symbol("phone"), o.phone)
+    OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
+    OpenAPI.validate_property(User, Symbol("email"), o.email)
+end
+
 function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
+
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "User", :format, val, "int64")
     end
+
+
+
+
+
     if name === Symbol("userStatus")
         OpenAPI.validate_param(name, "User", :format, val, "int32")
     end
+
 end
diff --git a/test/server/petstore_v2/petstore/.openapi-generator/VERSION b/test/server/petstore_v2/petstore/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/server/petstore_v2/petstore/.openapi-generator/VERSION
+++ b/test/server/petstore_v2/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/server/petstore_v2/petstore/README.md b/test/server/petstore_v2/petstore/README.md
index ffeaa70..dfaddfe 100644
--- a/test/server/petstore_v2/petstore/README.md
+++ b/test/server/petstore_v2/petstore/README.md
@@ -6,6 +6,7 @@ This is a sample server Petstore server.  You can find out more about Swagger at
 This API server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.6
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaServerCodegen
 
 
diff --git a/test/server/petstore_v2/petstore/docs/PetApi.md b/test/server/petstore_v2/petstore/docs/PetApi.md
index 90ab709..291445d 100644
--- a/test/server/petstore_v2/petstore/docs/PetApi.md
+++ b/test/server/petstore_v2/petstore/docs/PetApi.md
@@ -24,7 +24,7 @@ Add a new pet to the store
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -51,7 +51,7 @@ Deletes a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| Pet id to delete | [default to nothing]
+**pet_id** | **Int64**| Pet id to delete |
 
 ### Optional Parameters
 
@@ -86,7 +86,7 @@ Multiple status values can be provided with comma separated strings
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter | [default to nothing]
+**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter |
 
 ### Return type
 
@@ -115,7 +115,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**tags** | [**Vector{String}**](String.md)| Tags to filter by | [default to nothing]
+**tags** | [**Vector{String}**](String.md)| Tags to filter by |
 
 ### Return type
 
@@ -144,7 +144,7 @@ Returns a single pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet to return | [default to nothing]
+**pet_id** | **Int64**| ID of pet to return |
 
 ### Return type
 
@@ -171,7 +171,7 @@ Update an existing pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**body** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -198,7 +198,7 @@ Updates a pet in the store with form data
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet that needs to be updated | [default to nothing]
+**pet_id** | **Int64**| ID of pet that needs to be updated |
 
 ### Optional Parameters
 
@@ -232,14 +232,14 @@ uploads an image
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet to update | [default to nothing]
+**pet_id** | **Int64**| ID of pet to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
- **file** | **String****String**| file to upload | [default to nothing]
+ **file** | **Vector{UInt8}**| file to upload | 
 
 ### Return type
 
diff --git a/test/server/petstore_v2/petstore/docs/StoreApi.md b/test/server/petstore_v2/petstore/docs/StoreApi.md
index 3c17628..6a9b9fd 100644
--- a/test/server/petstore_v2/petstore/docs/StoreApi.md
+++ b/test/server/petstore_v2/petstore/docs/StoreApi.md
@@ -22,7 +22,7 @@ For valid response try integer IDs with positive integer value. Negative or non-
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order_id** | **Int64**| ID of the order that needs to be deleted | [default to nothing]
+**order_id** | **Int64**| ID of the order that needs to be deleted |
 
 ### Return type
 
@@ -76,7 +76,7 @@ For valid response try integer IDs with value >= 1 and <= 10. Other values will
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order_id** | **Int64**| ID of pet that needs to be fetched | [default to nothing]
+**order_id** | **Int64**| ID of pet that needs to be fetched |
 
 ### Return type
 
@@ -103,7 +103,7 @@ Place an order for a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**body** | [**Order**](Order.md)| order placed for purchasing the pet | 
+**body** | [**Order**](Order.md)| order placed for purchasing the pet |
 
 ### Return type
 
diff --git a/test/server/petstore_v2/petstore/docs/UserApi.md b/test/server/petstore_v2/petstore/docs/UserApi.md
index b9f02ff..7f21ab5 100644
--- a/test/server/petstore_v2/petstore/docs/UserApi.md
+++ b/test/server/petstore_v2/petstore/docs/UserApi.md
@@ -26,7 +26,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**body** | [**User**](User.md)| Created user object | 
+**body** | [**User**](User.md)| Created user object |
 
 ### Return type
 
@@ -53,7 +53,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**body** | [**Vector{User}**](User.md)| List of user object | 
+**body** | [**Vector{User}**](User.md)| List of user object |
 
 ### Return type
 
@@ -80,7 +80,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**body** | [**Vector{User}**](User.md)| List of user object | 
+**body** | [**Vector{User}**](User.md)| List of user object |
 
 ### Return type
 
@@ -109,7 +109,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The name that needs to be deleted | [default to nothing]
+**username** | **String**| The name that needs to be deleted |
 
 ### Return type
 
@@ -136,7 +136,7 @@ Get user by user name
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The name that needs to be fetched. Use user1 for testing.  | [default to nothing]
+**username** | **String**| The name that needs to be fetched. Use user1 for testing.  |
 
 ### Return type
 
@@ -163,8 +163,8 @@ Logs user into the system
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The user name for login | [default to nothing]
-**password** | **String**| The password for login in clear text | [default to nothing]
+**username** | **String**| The user name for login |
+**password** | **String**| The password for login in clear text |
 
 ### Return type
 
@@ -216,8 +216,8 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| name that need to be updated | [default to nothing]
-**body** | [**User**](User.md)| Updated user object | 
+**username** | **String**| name that need to be updated |
+**body** | [**User**](User.md)| Updated user object |
 
 ### Return type
 
diff --git a/test/server/petstore_v2/petstore/src/apis/api_PetApi.jl b/test/server/petstore_v2/petstore/src/apis/api_PetApi.jl
index 4447492..8a8eec7 100644
--- a/test/server/petstore_v2/petstore/src/apis/api_PetApi.jl
+++ b/test/server/petstore_v2/petstore/src/apis/api_PetApi.jl
@@ -15,7 +15,20 @@ end
 function add_pet_validate(handler)
     function add_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "add_pet"
         
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -45,7 +58,31 @@ end
 function delete_pet_validate(handler)
     function delete_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_pet"
+        
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
         
+        n = "api_key"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -63,7 +100,7 @@ function find_pets_by_status_read(handler)
     function find_pets_by_status_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["status"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "status", required=true, )
+        openapi_params["status"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "status", required=true, style="form", is_explode=true)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -73,7 +110,20 @@ end
 function find_pets_by_status_validate(handler)
     function find_pets_by_status_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "find_pets_by_status"
         
+        n = "status"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -91,7 +141,7 @@ function find_pets_by_tags_read(handler)
     function find_pets_by_tags_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["tags"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "tags", required=true, )
+        openapi_params["tags"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "tags", required=true, style="form", is_explode=true)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -101,7 +151,20 @@ end
 function find_pets_by_tags_validate(handler)
     function find_pets_by_tags_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "find_pets_by_tags"
         
+        n = "tags"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -129,7 +192,20 @@ end
 function get_pet_by_id_validate(handler)
     function get_pet_by_id_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_pet_by_id"
         
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -156,7 +232,20 @@ end
 function update_pet_validate(handler)
     function update_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_pet"
         
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -188,7 +277,42 @@ end
 function update_pet_with_form_validate(handler)
     function update_pet_with_form_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_pet_with_form"
         
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "name"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "status"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -220,7 +344,42 @@ end
 function upload_file_validate(handler)
     function upload_file_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "upload_file"
         
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "additionalMetadata"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "file"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/petstore_v2/petstore/src/apis/api_StoreApi.jl b/test/server/petstore_v2/petstore/src/apis/api_StoreApi.jl
index 81f630f..9482b0c 100644
--- a/test/server/petstore_v2/petstore/src/apis/api_StoreApi.jl
+++ b/test/server/petstore_v2/petstore/src/apis/api_StoreApi.jl
@@ -16,9 +16,15 @@ end
 function delete_order_validate(handler)
     function delete_order_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_order"
         
-        OpenAPI.validate_param("orderId", "delete_order", :minimum, openapi_params["orderId"], 1, false)
-        
+        n = "orderId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            OpenAPI.validate_param(n, op, :minimum, v, 1, false)
+        end
+
         return handler(req)
     end
 end
@@ -44,7 +50,8 @@ end
 function get_inventory_validate(handler)
     function get_inventory_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        
+        op = "get_inventory"
+
         return handler(req)
     end
 end
@@ -72,10 +79,16 @@ end
 function get_order_by_id_validate(handler)
     function get_order_by_id_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_order_by_id"
         
-        OpenAPI.validate_param("orderId", "get_order_by_id", :maximum, openapi_params["orderId"], 10, false)
-        OpenAPI.validate_param("orderId", "get_order_by_id", :minimum, openapi_params["orderId"], 1, false)
-        
+        n = "orderId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            OpenAPI.validate_param(n, op, :maximum, v, 10, false)
+            OpenAPI.validate_param(n, op, :minimum, v, 1, false)
+        end
+
         return handler(req)
     end
 end
@@ -102,7 +115,20 @@ end
 function place_order_validate(handler)
     function place_order_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "place_order"
         
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/petstore_v2/petstore/src/apis/api_UserApi.jl b/test/server/petstore_v2/petstore/src/apis/api_UserApi.jl
index d4d913e..5d4ffed 100644
--- a/test/server/petstore_v2/petstore/src/apis/api_UserApi.jl
+++ b/test/server/petstore_v2/petstore/src/apis/api_UserApi.jl
@@ -15,7 +15,20 @@ end
 function create_user_validate(handler)
     function create_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_user"
         
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -42,7 +55,20 @@ end
 function create_users_with_array_input_validate(handler)
     function create_users_with_array_input_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_users_with_array_input"
         
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -69,7 +95,20 @@ end
 function create_users_with_list_input_validate(handler)
     function create_users_with_list_input_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_users_with_list_input"
         
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -97,7 +136,20 @@ end
 function delete_user_validate(handler)
     function delete_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -125,7 +177,20 @@ end
 function get_user_by_name_validate(handler)
     function get_user_by_name_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_user_by_name"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -143,8 +208,8 @@ function login_user_read(handler)
     function login_user_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["username"] = OpenAPI.Servers.to_param(String, query_params, "username", required=true, )
-        openapi_params["password"] = OpenAPI.Servers.to_param(String, query_params, "password", required=true, )
+        openapi_params["username"] = OpenAPI.Servers.to_param(String, query_params, "username", required=true, style="", is_explode=false)
+        openapi_params["password"] = OpenAPI.Servers.to_param(String, query_params, "password", required=true, style="", is_explode=false)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -154,7 +219,32 @@ end
 function login_user_validate(handler)
     function login_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "login_user"
+        
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
         
+        n = "password"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -180,7 +270,8 @@ end
 function logout_user_validate(handler)
     function logout_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        
+        op = "logout_user"
+
         return handler(req)
     end
 end
@@ -209,7 +300,32 @@ end
 function update_user_validate(handler)
     function update_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "body"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/petstore_v2/petstore/src/models/model_ApiResponse.jl b/test/server/petstore_v2/petstore/src/models/model_ApiResponse.jl
index e8b7ce2..a196ba0 100644
--- a/test/server/petstore_v2/petstore/src/models/model_ApiResponse.jl
+++ b/test/server/petstore_v2/petstore/src/models/model_ApiResponse.jl
@@ -20,22 +20,30 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
     message::Union{Nothing, String} = nothing
 
     function ApiResponse(code, type, message, )
-        OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
-        OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
-        OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
-        return new(code, type, message, )
+        o = new(code, type, message, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type ApiResponse
 
 const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("code")=>"Int64", Symbol("type")=>"String", Symbol("message")=>"String", )
 OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
 
-function check_required(o::ApiResponse)
+function OpenAPI.check_required(o::ApiResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::ApiResponse)
+    OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
+    OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
+    OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
+end
+
 function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
+
     if name === Symbol("code")
         OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32")
     end
+
+
 end
diff --git a/test/server/petstore_v2/petstore/src/models/model_Category.jl b/test/server/petstore_v2/petstore/src/models/model_Category.jl
index 3153470..159890d 100644
--- a/test/server/petstore_v2/petstore/src/models/model_Category.jl
+++ b/test/server/petstore_v2/petstore/src/models/model_Category.jl
@@ -17,21 +17,28 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Category(id, name, )
-        OpenAPI.validate_property(Category, Symbol("id"), id)
-        OpenAPI.validate_property(Category, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Category
 
 const _property_types_Category = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
 
-function check_required(o::Category)
+function OpenAPI.check_required(o::Category)
     true
 end
 
+function OpenAPI.validate_properties(o::Category)
+    OpenAPI.validate_property(Category, Symbol("id"), o.id)
+    OpenAPI.validate_property(Category, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Category", :format, val, "int64")
     end
+
 end
diff --git a/test/server/petstore_v2/petstore/src/models/model_Order.jl b/test/server/petstore_v2/petstore/src/models/model_Order.jl
index 0f7efe8..a11ca51 100644
--- a/test/server/petstore_v2/petstore/src/models/model_Order.jl
+++ b/test/server/petstore_v2/petstore/src/models/model_Order.jl
@@ -29,37 +29,49 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
     complete::Union{Nothing, Bool} = nothing
 
     function Order(id, petId, quantity, shipDate, status, complete, )
-        OpenAPI.validate_property(Order, Symbol("id"), id)
-        OpenAPI.validate_property(Order, Symbol("petId"), petId)
-        OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
-        OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
-        OpenAPI.validate_property(Order, Symbol("status"), status)
-        OpenAPI.validate_property(Order, Symbol("complete"), complete)
-        return new(id, petId, quantity, shipDate, status, complete, )
+        o = new(id, petId, quantity, shipDate, status, complete, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Order
 
 const _property_types_Order = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("petId")=>"Int64", Symbol("quantity")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("complete")=>"Bool", )
 OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
 
-function check_required(o::Order)
+function OpenAPI.check_required(o::Order)
     true
 end
 
+function OpenAPI.validate_properties(o::Order)
+    OpenAPI.validate_property(Order, Symbol("id"), o.id)
+    OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
+    OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
+    OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
+    OpenAPI.validate_property(Order, Symbol("status"), o.status)
+    OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
+end
+
 function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("petId")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("quantity")
         OpenAPI.validate_param(name, "Order", :format, val, "int32")
     end
+
     if name === Symbol("shipDate")
         OpenAPI.validate_param(name, "Order", :format, val, "date-time")
     end
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"])
     end
+
+
 end
diff --git a/test/server/petstore_v2/petstore/src/models/model_Pet.jl b/test/server/petstore_v2/petstore/src/models/model_Pet.jl
index ab01a63..322d93a 100644
--- a/test/server/petstore_v2/petstore/src/models/model_Pet.jl
+++ b/test/server/petstore_v2/petstore/src/models/model_Pet.jl
@@ -29,30 +29,42 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     status::Union{Nothing, String} = nothing
 
     function Pet(id, category, name, photoUrls, tags, status, )
-        OpenAPI.validate_property(Pet, Symbol("id"), id)
-        OpenAPI.validate_property(Pet, Symbol("category"), category)
-        OpenAPI.validate_property(Pet, Symbol("name"), name)
-        OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
-        OpenAPI.validate_property(Pet, Symbol("tags"), tags)
-        OpenAPI.validate_property(Pet, Symbol("status"), status)
-        return new(id, category, name, photoUrls, tags, status, )
+        o = new(id, category, name, photoUrls, tags, status, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("category")=>"Category", Symbol("name")=>"String", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("status")=>"String", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.name === nothing && (return false)
     o.photoUrls === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("id"), o.id)
+    OpenAPI.validate_property(Pet, Symbol("category"), o.category)
+    OpenAPI.validate_property(Pet, Symbol("name"), o.name)
+    OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
+    OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
+    OpenAPI.validate_property(Pet, Symbol("status"), o.status)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Pet", :format, val, "int64")
     end
+
+
+
+
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"])
     end
+
 end
diff --git a/test/server/petstore_v2/petstore/src/models/model_Tag.jl b/test/server/petstore_v2/petstore/src/models/model_Tag.jl
index ee91e56..83051f1 100644
--- a/test/server/petstore_v2/petstore/src/models/model_Tag.jl
+++ b/test/server/petstore_v2/petstore/src/models/model_Tag.jl
@@ -17,21 +17,28 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Tag(id, name, )
-        OpenAPI.validate_property(Tag, Symbol("id"), id)
-        OpenAPI.validate_property(Tag, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Tag
 
 const _property_types_Tag = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
 
-function check_required(o::Tag)
+function OpenAPI.check_required(o::Tag)
     true
 end
 
+function OpenAPI.validate_properties(o::Tag)
+    OpenAPI.validate_property(Tag, Symbol("id"), o.id)
+    OpenAPI.validate_property(Tag, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Tag", :format, val, "int64")
     end
+
 end
diff --git a/test/server/petstore_v2/petstore/src/models/model_User.jl b/test/server/petstore_v2/petstore/src/models/model_User.jl
index 2233bcf..39b2359 100644
--- a/test/server/petstore_v2/petstore/src/models/model_User.jl
+++ b/test/server/petstore_v2/petstore/src/models/model_User.jl
@@ -35,29 +35,42 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
     userStatus::Union{Nothing, Int64} = nothing
 
     function User(id, username, firstName, lastName, email, password, phone, userStatus, )
-        OpenAPI.validate_property(User, Symbol("id"), id)
-        OpenAPI.validate_property(User, Symbol("username"), username)
-        OpenAPI.validate_property(User, Symbol("firstName"), firstName)
-        OpenAPI.validate_property(User, Symbol("lastName"), lastName)
-        OpenAPI.validate_property(User, Symbol("email"), email)
-        OpenAPI.validate_property(User, Symbol("password"), password)
-        OpenAPI.validate_property(User, Symbol("phone"), phone)
-        OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
-        return new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        o = new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type User
 
 const _property_types_User = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("email")=>"String", Symbol("password")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", )
 OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
 
-function check_required(o::User)
+function OpenAPI.check_required(o::User)
     true
 end
 
+function OpenAPI.validate_properties(o::User)
+    OpenAPI.validate_property(User, Symbol("id"), o.id)
+    OpenAPI.validate_property(User, Symbol("username"), o.username)
+    OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
+    OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
+    OpenAPI.validate_property(User, Symbol("email"), o.email)
+    OpenAPI.validate_property(User, Symbol("password"), o.password)
+    OpenAPI.validate_property(User, Symbol("phone"), o.phone)
+    OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
+end
+
 function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "User", :format, val, "int64")
     end
+
+
+
+
+
+
+
     if name === Symbol("userStatus")
         OpenAPI.validate_param(name, "User", :format, val, "int32")
     end
diff --git a/test/server/petstore_v3/petstore/.openapi-generator/VERSION b/test/server/petstore_v3/petstore/.openapi-generator/VERSION
index 757e674..96cfbb1 100644
--- a/test/server/petstore_v3/petstore/.openapi-generator/VERSION
+++ b/test/server/petstore_v3/petstore/.openapi-generator/VERSION
@@ -1 +1 @@
-7.0.0-SNAPSHOT
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/server/petstore_v3/petstore/README.md b/test/server/petstore_v3/petstore/README.md
index b45da64..b1fc21d 100644
--- a/test/server/petstore_v3/petstore/README.md
+++ b/test/server/petstore_v3/petstore/README.md
@@ -6,6 +6,7 @@ This is a sample server Petstore server. For this sample, you can use the api ke
 This API server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaServerCodegen
 
 
diff --git a/test/server/petstore_v3/petstore/docs/PetApi.md b/test/server/petstore_v3/petstore/docs/PetApi.md
index c625bd4..22e34a9 100644
--- a/test/server/petstore_v3/petstore/docs/PetApi.md
+++ b/test/server/petstore_v3/petstore/docs/PetApi.md
@@ -24,7 +24,7 @@ Add a new pet to the store
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -51,7 +51,7 @@ Deletes a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| Pet id to delete | [default to nothing]
+**pet_id** | **Int64**| Pet id to delete |
 
 ### Optional Parameters
 
@@ -86,7 +86,7 @@ Multiple status values can be provided with comma separated strings
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter | [default to nothing]
+**status** | [**Vector{String}**](String.md)| Status values that need to be considered for filter |
 
 ### Return type
 
@@ -115,7 +115,7 @@ Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**tags** | [**Vector{String}**](String.md)| Tags to filter by | [default to nothing]
+**tags** | [**Vector{String}**](String.md)| Tags to filter by |
 
 ### Return type
 
@@ -144,7 +144,7 @@ Returns a single pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet to return | [default to nothing]
+**pet_id** | **Int64**| ID of pet to return |
 
 ### Return type
 
@@ -171,7 +171,7 @@ Update an existing pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store | 
+**pet** | [**Pet**](Pet.md)| Pet object that needs to be added to the store |
 
 ### Return type
 
@@ -198,7 +198,7 @@ Updates a pet in the store with form data
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet that needs to be updated | [default to nothing]
+**pet_id** | **Int64**| ID of pet that needs to be updated |
 
 ### Optional Parameters
 
@@ -232,14 +232,14 @@ uploads an image
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**pet_id** | **Int64**| ID of pet to update | [default to nothing]
+**pet_id** | **Int64**| ID of pet to update |
 
 ### Optional Parameters
 
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **additional_metadata** | **String**| Additional data to pass to server | [default to nothing]
- **file** | **String****String**| file to upload | [default to nothing]
+ **file** | **Vector{UInt8}**| file to upload | 
 
 ### Return type
 
diff --git a/test/server/petstore_v3/petstore/docs/StoreApi.md b/test/server/petstore_v3/petstore/docs/StoreApi.md
index 834c458..3bd28f9 100644
--- a/test/server/petstore_v3/petstore/docs/StoreApi.md
+++ b/test/server/petstore_v3/petstore/docs/StoreApi.md
@@ -22,7 +22,7 @@ For valid response try integer IDs with value < 1000. Anything above 1000 or non
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order_id** | **String**| ID of the order that needs to be deleted | [default to nothing]
+**order_id** | **String**| ID of the order that needs to be deleted |
 
 ### Return type
 
@@ -76,7 +76,7 @@ For valid response try integer IDs with value <= 5 or > 10. Other values will ge
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order_id** | **Int64**| ID of pet that needs to be fetched | [default to nothing]
+**order_id** | **Int64**| ID of pet that needs to be fetched |
 
 ### Return type
 
@@ -103,7 +103,7 @@ Place an order for a pet
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**order** | [**Order**](Order.md)| order placed for purchasing the pet | 
+**order** | [**Order**](Order.md)| order placed for purchasing the pet |
 
 ### Return type
 
diff --git a/test/server/petstore_v3/petstore/docs/UserApi.md b/test/server/petstore_v3/petstore/docs/UserApi.md
index 7003c40..e6b0821 100644
--- a/test/server/petstore_v3/petstore/docs/UserApi.md
+++ b/test/server/petstore_v3/petstore/docs/UserApi.md
@@ -26,7 +26,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**user** | [**User**](User.md)| Created user object | 
+**user** | [**User**](User.md)| Created user object |
 
 ### Return type
 
@@ -53,7 +53,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md)| List of user object |
 
 ### Return type
 
@@ -80,7 +80,7 @@ Creates list of users with given input array
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**user** | [**Vector{User}**](User.md)| List of user object | 
+**user** | [**Vector{User}**](User.md)| List of user object |
 
 ### Return type
 
@@ -109,7 +109,7 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The name that needs to be deleted | [default to nothing]
+**username** | **String**| The name that needs to be deleted |
 
 ### Return type
 
@@ -136,7 +136,7 @@ Get user by user name
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The name that needs to be fetched. Use user1 for testing. | [default to nothing]
+**username** | **String**| The name that needs to be fetched. Use user1 for testing. |
 
 ### Return type
 
@@ -163,8 +163,8 @@ Logs user into the system
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| The user name for login | [default to nothing]
-**password** | **String**| The password for login in clear text | [default to nothing]
+**username** | **String**| The user name for login |
+**password** | **String**| The password for login in clear text |
 
 ### Return type
 
@@ -216,8 +216,8 @@ This can only be done by the logged in user.
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**username** | **String**| name that need to be deleted | [default to nothing]
-**user** | [**User**](User.md)| Updated user object | 
+**username** | **String**| name that need to be deleted |
+**user** | [**User**](User.md)| Updated user object |
 
 ### Return type
 
diff --git a/test/server/petstore_v3/petstore/src/apis/api_PetApi.jl b/test/server/petstore_v3/petstore/src/apis/api_PetApi.jl
index 2d8ac35..8f42cf3 100644
--- a/test/server/petstore_v3/petstore/src/apis/api_PetApi.jl
+++ b/test/server/petstore_v3/petstore/src/apis/api_PetApi.jl
@@ -15,6 +15,19 @@ end
 function add_pet_validate(handler)
     function add_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "add_pet"
+        
+        n = "Pet"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -45,6 +58,30 @@ end
 function delete_pet_validate(handler)
     function delete_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_pet"
+        
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "api_key"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -63,7 +100,7 @@ function find_pets_by_status_read(handler)
     function find_pets_by_status_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["status"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "status", required=true, )
+        openapi_params["status"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "status", required=true, style="form", is_explode=false)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -73,6 +110,19 @@ end
 function find_pets_by_status_validate(handler)
     function find_pets_by_status_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "find_pets_by_status"
+        
+        n = "status"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -91,7 +141,7 @@ function find_pets_by_tags_read(handler)
     function find_pets_by_tags_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["tags"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "tags", required=true, )
+        openapi_params["tags"] = OpenAPI.Servers.to_param(Vector{String}, query_params, "tags", required=true, style="form", is_explode=false)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -101,6 +151,19 @@ end
 function find_pets_by_tags_validate(handler)
     function find_pets_by_tags_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "find_pets_by_tags"
+        
+        n = "tags"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -129,6 +192,19 @@ end
 function get_pet_by_id_validate(handler)
     function get_pet_by_id_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_pet_by_id"
+        
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -156,6 +232,19 @@ end
 function update_pet_validate(handler)
     function update_pet_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_pet"
+        
+        n = "Pet"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -188,6 +277,41 @@ end
 function update_pet_with_form_validate(handler)
     function update_pet_with_form_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_pet_with_form"
+        
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "name"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "status"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
@@ -220,6 +344,41 @@ end
 function upload_file_validate(handler)
     function upload_file_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "upload_file"
+        
+        n = "petId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "additionalMetadata"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "file"
+        v = get(openapi_params, n, nothing)
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
 
         return handler(req)
     end
diff --git a/test/server/petstore_v3/petstore/src/apis/api_StoreApi.jl b/test/server/petstore_v3/petstore/src/apis/api_StoreApi.jl
index b982905..4a8b69f 100644
--- a/test/server/petstore_v3/petstore/src/apis/api_StoreApi.jl
+++ b/test/server/petstore_v3/petstore/src/apis/api_StoreApi.jl
@@ -16,7 +16,20 @@ end
 function delete_order_validate(handler)
     function delete_order_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_order"
         
+        n = "orderId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -42,7 +55,8 @@ end
 function get_inventory_validate(handler)
     function get_inventory_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        
+        op = "get_inventory"
+
         return handler(req)
     end
 end
@@ -70,10 +84,16 @@ end
 function get_order_by_id_validate(handler)
     function get_order_by_id_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_order_by_id"
         
-        OpenAPI.validate_param("orderId", "get_order_by_id", :maximum, openapi_params["orderId"], 5, false)
-        OpenAPI.validate_param("orderId", "get_order_by_id", :minimum, openapi_params["orderId"], 1, false)
-        
+        n = "orderId"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            OpenAPI.validate_param(n, op, :maximum, v, 5, false)
+            OpenAPI.validate_param(n, op, :minimum, v, 1, false)
+        end
+
         return handler(req)
     end
 end
@@ -100,7 +120,20 @@ end
 function place_order_validate(handler)
     function place_order_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "place_order"
         
+        n = "Order"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/petstore_v3/petstore/src/apis/api_UserApi.jl b/test/server/petstore_v3/petstore/src/apis/api_UserApi.jl
index be5fda6..fc226f0 100644
--- a/test/server/petstore_v3/petstore/src/apis/api_UserApi.jl
+++ b/test/server/petstore_v3/petstore/src/apis/api_UserApi.jl
@@ -15,7 +15,20 @@ end
 function create_user_validate(handler)
     function create_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_user"
         
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -42,7 +55,20 @@ end
 function create_users_with_array_input_validate(handler)
     function create_users_with_array_input_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_users_with_array_input"
         
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -69,7 +95,20 @@ end
 function create_users_with_list_input_validate(handler)
     function create_users_with_list_input_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "create_users_with_list_input"
         
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -97,7 +136,20 @@ end
 function delete_user_validate(handler)
     function delete_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delete_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -125,7 +177,20 @@ end
 function get_user_by_name_validate(handler)
     function get_user_by_name_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "get_user_by_name"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -143,8 +208,8 @@ function login_user_read(handler)
     function login_user_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["username"] = OpenAPI.Servers.to_param(String, query_params, "username", required=true, )
-        openapi_params["password"] = OpenAPI.Servers.to_param(String, query_params, "password", required=true, )
+        openapi_params["username"] = OpenAPI.Servers.to_param(String, query_params, "username", required=true, style="form", is_explode=true)
+        openapi_params["password"] = OpenAPI.Servers.to_param(String, query_params, "password", required=true, style="form", is_explode=true)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -154,7 +219,32 @@ end
 function login_user_validate(handler)
     function login_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "login_user"
+        
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
         
+        n = "password"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
@@ -180,7 +270,8 @@ end
 function logout_user_validate(handler)
     function logout_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
-        
+        op = "logout_user"
+
         return handler(req)
     end
 end
@@ -209,7 +300,32 @@ end
 function update_user_validate(handler)
     function update_user_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "update_user"
         
+        n = "username"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+        
+        n = "User"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            if isa(v, OpenAPI.APIModel)
+                OpenAPI.validate_properties(v)
+                if !OpenAPI.check_required(v)
+                    throw(OpenAPI.ValidationException(;reason="$n is missing required properties", operation_or_model=op))
+                end
+            end
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/petstore_v3/petstore/src/models/model_ApiResponse.jl b/test/server/petstore_v3/petstore/src/models/model_ApiResponse.jl
index 107fab6..1d6b413 100644
--- a/test/server/petstore_v3/petstore/src/models/model_ApiResponse.jl
+++ b/test/server/petstore_v3/petstore/src/models/model_ApiResponse.jl
@@ -21,22 +21,30 @@ Base.@kwdef mutable struct ApiResponse <: OpenAPI.APIModel
     message::Union{Nothing, String} = nothing
 
     function ApiResponse(code, type, message, )
-        OpenAPI.validate_property(ApiResponse, Symbol("code"), code)
-        OpenAPI.validate_property(ApiResponse, Symbol("type"), type)
-        OpenAPI.validate_property(ApiResponse, Symbol("message"), message)
-        return new(code, type, message, )
+        o = new(code, type, message, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type ApiResponse
 
 const _property_types_ApiResponse = Dict{Symbol,String}(Symbol("code")=>"Int64", Symbol("type")=>"String", Symbol("message")=>"String", )
 OpenAPI.property_type(::Type{ ApiResponse }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_ApiResponse[name]))}
 
-function check_required(o::ApiResponse)
+function OpenAPI.check_required(o::ApiResponse)
     true
 end
 
+function OpenAPI.validate_properties(o::ApiResponse)
+    OpenAPI.validate_property(ApiResponse, Symbol("code"), o.code)
+    OpenAPI.validate_property(ApiResponse, Symbol("type"), o.type)
+    OpenAPI.validate_property(ApiResponse, Symbol("message"), o.message)
+end
+
 function OpenAPI.validate_property(::Type{ ApiResponse }, name::Symbol, val)
+
     if name === Symbol("code")
         OpenAPI.validate_param(name, "ApiResponse", :format, val, "int32")
     end
+
+
 end
diff --git a/test/server/petstore_v3/petstore/src/models/model_Category.jl b/test/server/petstore_v3/petstore/src/models/model_Category.jl
index 90c8264..843d8a5 100644
--- a/test/server/petstore_v3/petstore/src/models/model_Category.jl
+++ b/test/server/petstore_v3/petstore/src/models/model_Category.jl
@@ -18,21 +18,28 @@ Base.@kwdef mutable struct Category <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Category(id, name, )
-        OpenAPI.validate_property(Category, Symbol("id"), id)
-        OpenAPI.validate_property(Category, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Category
 
 const _property_types_Category = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Category }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Category[name]))}
 
-function check_required(o::Category)
+function OpenAPI.check_required(o::Category)
     true
 end
 
+function OpenAPI.validate_properties(o::Category)
+    OpenAPI.validate_property(Category, Symbol("id"), o.id)
+    OpenAPI.validate_property(Category, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Category }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Category", :format, val, "int64")
     end
+
 end
diff --git a/test/server/petstore_v3/petstore/src/models/model_Order.jl b/test/server/petstore_v3/petstore/src/models/model_Order.jl
index 9443890..c1e95bc 100644
--- a/test/server/petstore_v3/petstore/src/models/model_Order.jl
+++ b/test/server/petstore_v3/petstore/src/models/model_Order.jl
@@ -30,37 +30,49 @@ Base.@kwdef mutable struct Order <: OpenAPI.APIModel
     complete::Union{Nothing, Bool} = false
 
     function Order(id, petId, quantity, shipDate, status, complete, )
-        OpenAPI.validate_property(Order, Symbol("id"), id)
-        OpenAPI.validate_property(Order, Symbol("petId"), petId)
-        OpenAPI.validate_property(Order, Symbol("quantity"), quantity)
-        OpenAPI.validate_property(Order, Symbol("shipDate"), shipDate)
-        OpenAPI.validate_property(Order, Symbol("status"), status)
-        OpenAPI.validate_property(Order, Symbol("complete"), complete)
-        return new(id, petId, quantity, shipDate, status, complete, )
+        o = new(id, petId, quantity, shipDate, status, complete, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Order
 
 const _property_types_Order = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("petId")=>"Int64", Symbol("quantity")=>"Int64", Symbol("shipDate")=>"ZonedDateTime", Symbol("status")=>"String", Symbol("complete")=>"Bool", )
 OpenAPI.property_type(::Type{ Order }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Order[name]))}
 
-function check_required(o::Order)
+function OpenAPI.check_required(o::Order)
     true
 end
 
+function OpenAPI.validate_properties(o::Order)
+    OpenAPI.validate_property(Order, Symbol("id"), o.id)
+    OpenAPI.validate_property(Order, Symbol("petId"), o.petId)
+    OpenAPI.validate_property(Order, Symbol("quantity"), o.quantity)
+    OpenAPI.validate_property(Order, Symbol("shipDate"), o.shipDate)
+    OpenAPI.validate_property(Order, Symbol("status"), o.status)
+    OpenAPI.validate_property(Order, Symbol("complete"), o.complete)
+end
+
 function OpenAPI.validate_property(::Type{ Order }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("petId")
         OpenAPI.validate_param(name, "Order", :format, val, "int64")
     end
+
     if name === Symbol("quantity")
         OpenAPI.validate_param(name, "Order", :format, val, "int32")
     end
+
     if name === Symbol("shipDate")
         OpenAPI.validate_param(name, "Order", :format, val, "date-time")
     end
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Order", :enum, val, ["placed", "approved", "delivered"])
     end
+
+
 end
diff --git a/test/server/petstore_v3/petstore/src/models/model_Pet.jl b/test/server/petstore_v3/petstore/src/models/model_Pet.jl
index 569a932..47f8f83 100644
--- a/test/server/petstore_v3/petstore/src/models/model_Pet.jl
+++ b/test/server/petstore_v3/petstore/src/models/model_Pet.jl
@@ -30,30 +30,42 @@ Base.@kwdef mutable struct Pet <: OpenAPI.APIModel
     status::Union{Nothing, String} = nothing
 
     function Pet(id, category, name, photoUrls, tags, status, )
-        OpenAPI.validate_property(Pet, Symbol("id"), id)
-        OpenAPI.validate_property(Pet, Symbol("category"), category)
-        OpenAPI.validate_property(Pet, Symbol("name"), name)
-        OpenAPI.validate_property(Pet, Symbol("photoUrls"), photoUrls)
-        OpenAPI.validate_property(Pet, Symbol("tags"), tags)
-        OpenAPI.validate_property(Pet, Symbol("status"), status)
-        return new(id, category, name, photoUrls, tags, status, )
+        o = new(id, category, name, photoUrls, tags, status, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Pet
 
 const _property_types_Pet = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("category")=>"Category", Symbol("name")=>"String", Symbol("photoUrls")=>"Vector{String}", Symbol("tags")=>"Vector{Tag}", Symbol("status")=>"String", )
 OpenAPI.property_type(::Type{ Pet }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Pet[name]))}
 
-function check_required(o::Pet)
+function OpenAPI.check_required(o::Pet)
     o.name === nothing && (return false)
     o.photoUrls === nothing && (return false)
     true
 end
 
+function OpenAPI.validate_properties(o::Pet)
+    OpenAPI.validate_property(Pet, Symbol("id"), o.id)
+    OpenAPI.validate_property(Pet, Symbol("category"), o.category)
+    OpenAPI.validate_property(Pet, Symbol("name"), o.name)
+    OpenAPI.validate_property(Pet, Symbol("photoUrls"), o.photoUrls)
+    OpenAPI.validate_property(Pet, Symbol("tags"), o.tags)
+    OpenAPI.validate_property(Pet, Symbol("status"), o.status)
+end
+
 function OpenAPI.validate_property(::Type{ Pet }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Pet", :format, val, "int64")
     end
+
+
+
+
+
     if name === Symbol("status")
         OpenAPI.validate_param(name, "Pet", :enum, val, ["available", "pending", "sold"])
     end
+
 end
diff --git a/test/server/petstore_v3/petstore/src/models/model_Tag.jl b/test/server/petstore_v3/petstore/src/models/model_Tag.jl
index f717688..2743b59 100644
--- a/test/server/petstore_v3/petstore/src/models/model_Tag.jl
+++ b/test/server/petstore_v3/petstore/src/models/model_Tag.jl
@@ -18,21 +18,28 @@ Base.@kwdef mutable struct Tag <: OpenAPI.APIModel
     name::Union{Nothing, String} = nothing
 
     function Tag(id, name, )
-        OpenAPI.validate_property(Tag, Symbol("id"), id)
-        OpenAPI.validate_property(Tag, Symbol("name"), name)
-        return new(id, name, )
+        o = new(id, name, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type Tag
 
 const _property_types_Tag = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("name")=>"String", )
 OpenAPI.property_type(::Type{ Tag }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_Tag[name]))}
 
-function check_required(o::Tag)
+function OpenAPI.check_required(o::Tag)
     true
 end
 
+function OpenAPI.validate_properties(o::Tag)
+    OpenAPI.validate_property(Tag, Symbol("id"), o.id)
+    OpenAPI.validate_property(Tag, Symbol("name"), o.name)
+end
+
 function OpenAPI.validate_property(::Type{ Tag }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "Tag", :format, val, "int64")
     end
+
 end
diff --git a/test/server/petstore_v3/petstore/src/models/model_User.jl b/test/server/petstore_v3/petstore/src/models/model_User.jl
index 5af0ccd..8e95c9a 100644
--- a/test/server/petstore_v3/petstore/src/models/model_User.jl
+++ b/test/server/petstore_v3/petstore/src/models/model_User.jl
@@ -36,29 +36,42 @@ Base.@kwdef mutable struct User <: OpenAPI.APIModel
     userStatus::Union{Nothing, Int64} = nothing
 
     function User(id, username, firstName, lastName, email, password, phone, userStatus, )
-        OpenAPI.validate_property(User, Symbol("id"), id)
-        OpenAPI.validate_property(User, Symbol("username"), username)
-        OpenAPI.validate_property(User, Symbol("firstName"), firstName)
-        OpenAPI.validate_property(User, Symbol("lastName"), lastName)
-        OpenAPI.validate_property(User, Symbol("email"), email)
-        OpenAPI.validate_property(User, Symbol("password"), password)
-        OpenAPI.validate_property(User, Symbol("phone"), phone)
-        OpenAPI.validate_property(User, Symbol("userStatus"), userStatus)
-        return new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        o = new(id, username, firstName, lastName, email, password, phone, userStatus, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type User
 
 const _property_types_User = Dict{Symbol,String}(Symbol("id")=>"Int64", Symbol("username")=>"String", Symbol("firstName")=>"String", Symbol("lastName")=>"String", Symbol("email")=>"String", Symbol("password")=>"String", Symbol("phone")=>"String", Symbol("userStatus")=>"Int64", )
 OpenAPI.property_type(::Type{ User }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_User[name]))}
 
-function check_required(o::User)
+function OpenAPI.check_required(o::User)
     true
 end
 
+function OpenAPI.validate_properties(o::User)
+    OpenAPI.validate_property(User, Symbol("id"), o.id)
+    OpenAPI.validate_property(User, Symbol("username"), o.username)
+    OpenAPI.validate_property(User, Symbol("firstName"), o.firstName)
+    OpenAPI.validate_property(User, Symbol("lastName"), o.lastName)
+    OpenAPI.validate_property(User, Symbol("email"), o.email)
+    OpenAPI.validate_property(User, Symbol("password"), o.password)
+    OpenAPI.validate_property(User, Symbol("phone"), o.phone)
+    OpenAPI.validate_property(User, Symbol("userStatus"), o.userStatus)
+end
+
 function OpenAPI.validate_property(::Type{ User }, name::Symbol, val)
+
     if name === Symbol("id")
         OpenAPI.validate_param(name, "User", :format, val, "int64")
     end
+
+
+
+
+
+
+
     if name === Symbol("userStatus")
         OpenAPI.validate_param(name, "User", :format, val, "int32")
     end
diff --git a/test/server/timeouttest/TimeoutTestServer/.openapi-generator/FILES b/test/server/timeouttest/TimeoutTestServer/.openapi-generator/FILES
index ebea56a..5868e7c 100644
--- a/test/server/timeouttest/TimeoutTestServer/.openapi-generator/FILES
+++ b/test/server/timeouttest/TimeoutTestServer/.openapi-generator/FILES
@@ -1,4 +1,3 @@
-.openapi-generator-ignore
 README.md
 docs/DefaultApi.md
 docs/DelayresponseGet200Response.md
diff --git a/test/server/timeouttest/TimeoutTestServer/.openapi-generator/VERSION b/test/server/timeouttest/TimeoutTestServer/.openapi-generator/VERSION
index 4b49d9b..96cfbb1 100644
--- a/test/server/timeouttest/TimeoutTestServer/.openapi-generator/VERSION
+++ b/test/server/timeouttest/TimeoutTestServer/.openapi-generator/VERSION
@@ -1 +1 @@
-7.2.0
\ No newline at end of file
+7.13.0-SNAPSHOT
diff --git a/test/server/timeouttest/TimeoutTestServer/README.md b/test/server/timeouttest/TimeoutTestServer/README.md
index ec09996..eee4b42 100644
--- a/test/server/timeouttest/TimeoutTestServer/README.md
+++ b/test/server/timeouttest/TimeoutTestServer/README.md
@@ -6,6 +6,7 @@ No description provided (generated by Openapi Generator https://github.com/opena
 This API server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 
 - API version: 1.0.0
+- Generator version: 7.13.0-SNAPSHOT
 - Build package: org.openapitools.codegen.languages.JuliaServerCodegen
 
 
diff --git a/test/server/timeouttest/TimeoutTestServer/docs/DefaultApi.md b/test/server/timeouttest/TimeoutTestServer/docs/DefaultApi.md
index 69d6a79..745e4aa 100644
--- a/test/server/timeouttest/TimeoutTestServer/docs/DefaultApi.md
+++ b/test/server/timeouttest/TimeoutTestServer/docs/DefaultApi.md
@@ -17,7 +17,7 @@ Delay Response Endpoint
 Name | Type | Description  | Notes
 ------------- | ------------- | ------------- | -------------
  **req** | **HTTP.Request** | The HTTP Request object | 
-**delay_seconds** | **Int64**| Number of seconds to delay the response | [default to nothing]
+**delay_seconds** | **Int64**| Number of seconds to delay the response |
 
 ### Return type
 
diff --git a/test/server/timeouttest/TimeoutTestServer/src/apis/api_DefaultApi.jl b/test/server/timeouttest/TimeoutTestServer/src/apis/api_DefaultApi.jl
index 7e9f859..aafbaf7 100644
--- a/test/server/timeouttest/TimeoutTestServer/src/apis/api_DefaultApi.jl
+++ b/test/server/timeouttest/TimeoutTestServer/src/apis/api_DefaultApi.jl
@@ -6,7 +6,7 @@ function delayresponse_get_read(handler)
     function delayresponse_get_read_handler(req::HTTP.Request)
         openapi_params = Dict{String,Any}()
         query_params = HTTP.queryparams(URIs.URI(req.target))
-        openapi_params["delay_seconds"] = OpenAPI.Servers.to_param(Int64, query_params, "delay_seconds", required=true, )
+        openapi_params["delay_seconds"] = OpenAPI.Servers.to_param(Int64, query_params, "delay_seconds", required=true, style="form", is_explode=true)
         req.context[:openapi_params] = openapi_params
 
         return handler(req)
@@ -16,9 +16,15 @@ end
 function delayresponse_get_validate(handler)
     function delayresponse_get_validate_handler(req::HTTP.Request)
         openapi_params = req.context[:openapi_params]
+        op = "delayresponse_get"
         
-        OpenAPI.validate_param("delay_seconds", "delayresponse_get", :minimum, openapi_params["delay_seconds"], 0, false)
-        
+        n = "delay_seconds"
+        v = get(openapi_params, n, nothing)
+        isnothing(v) && throw(OpenAPI.ValidationException(;reason="missing parameter $n", operation_or_model=op))
+        if !isnothing(v)
+            OpenAPI.validate_param(n, op, :minimum, v, 0, false)
+        end
+
         return handler(req)
     end
 end
diff --git a/test/server/timeouttest/TimeoutTestServer/src/models/model_DelayresponseGet200Response.jl b/test/server/timeouttest/TimeoutTestServer/src/models/model_DelayresponseGet200Response.jl
index c700d17..caa9121 100644
--- a/test/server/timeouttest/TimeoutTestServer/src/models/model_DelayresponseGet200Response.jl
+++ b/test/server/timeouttest/TimeoutTestServer/src/models/model_DelayresponseGet200Response.jl
@@ -14,17 +14,23 @@ Base.@kwdef mutable struct DelayresponseGet200Response <: OpenAPI.APIModel
     delay_seconds::Union{Nothing, String} = nothing
 
     function DelayresponseGet200Response(delay_seconds, )
-        OpenAPI.validate_property(DelayresponseGet200Response, Symbol("delay_seconds"), delay_seconds)
-        return new(delay_seconds, )
+        o = new(delay_seconds, )
+        OpenAPI.validate_properties(o)
+        return o
     end
 end # type DelayresponseGet200Response
 
 const _property_types_DelayresponseGet200Response = Dict{Symbol,String}(Symbol("delay_seconds")=>"String", )
 OpenAPI.property_type(::Type{ DelayresponseGet200Response }, name::Symbol) = Union{Nothing,eval(Base.Meta.parse(_property_types_DelayresponseGet200Response[name]))}
 
-function check_required(o::DelayresponseGet200Response)
+function OpenAPI.check_required(o::DelayresponseGet200Response)
     true
 end
 
+function OpenAPI.validate_properties(o::DelayresponseGet200Response)
+    OpenAPI.validate_property(DelayresponseGet200Response, Symbol("delay_seconds"), o.delay_seconds)
+end
+
 function OpenAPI.validate_property(::Type{ DelayresponseGet200Response }, name::Symbol, val)
+
 end
