From 7423f5eb63e2a8bdb0d00c5f82934a42e339beca Mon Sep 17 00:00:00 2001 From: Martin Hauner Date: Tue, 26 Nov 2019 22:32:49 +0100 Subject: [PATCH] handle object type on global parameter mapping --- .../spring/converter/DataTypeConverter.groovy | 10 +++++ ...peConverterParameterTypeMappingSpec.groovy | 45 +++++++++++++------ 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/main/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverter.groovy b/src/main/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverter.groovy index 782342ff..1fa37684 100644 --- a/src/main/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverter.groovy +++ b/src/main/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverter.groovy @@ -263,6 +263,16 @@ class DataTypeConverter { ) } } + + // check global parameter mapping + List parameters = getParameterMappings (options.typeMappings) + def parameter = parameters.find { it.parameterName == pn && it.mapping.sourceTypeName == 'object' } + if (parameter) { + return new TargetType ( + typeName: parameter.mapping.targetTypeName, + genericNames: parameter.mapping.genericTypeNames + ) + } } // check global mapping diff --git a/src/test/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverterParameterTypeMappingSpec.groovy b/src/test/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverterParameterTypeMappingSpec.groovy index 1c89c881..ff1d1a2d 100644 --- a/src/test/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverterParameterTypeMappingSpec.groovy +++ b/src/test/groovy/com/github/hauner/openapi/spring/converter/DataTypeConverterParameterTypeMappingSpec.groovy @@ -21,12 +21,14 @@ import com.github.hauner.openapi.spring.converter.mapping.ParameterTypeMapping import com.github.hauner.openapi.spring.converter.mapping.TypeMapping import com.github.hauner.openapi.spring.model.Api import spock.lang.Specification +import spock.lang.Unroll import static com.github.hauner.openapi.spring.support.OpenApiParser.parse class DataTypeConverterParameterTypeMappingSpec extends Specification { - void "converts object parameter schema to java type via endpoint mapping" () { + @Unroll + void "converts object parameter schema to java type via #type" () { def openApi = parse ("""\ openapi: 3.0.2 info: @@ -53,25 +55,40 @@ paths: """) when: - def options = new ApiOptions( - packageName: 'pkg', - typeMappings: [ - new EndpointTypeMapping (path: '/foobar', - typeMappings: [ - new ParameterTypeMapping ( - parameterName: 'foobar', - mapping: new TypeMapping( - sourceTypeName: 'object', - targetTypeName: 'pkg.TargetClass') - ) - ]) - ]) + def options = new ApiOptions(packageName: 'pkg', typeMappings: mappings) Api api = new ApiConverter (options).convert (openApi) then: def itf = api.interfaces.first () def ep = itf.endpoints.first () ep.parameters.first ().dataType.name == 'TargetClass' + + where: + type << [ + 'endpoint parameter mapping', + 'global parameter mapping' + ] + + mappings << [ + [ + new EndpointTypeMapping (path: '/foobar', + typeMappings: [ + new ParameterTypeMapping ( + parameterName: 'foobar', + mapping: new TypeMapping ( + sourceTypeName: 'object', + targetTypeName: 'pkg.TargetClass') + ) + ]) + ], [ + new ParameterTypeMapping ( + parameterName: 'foobar', + mapping: new TypeMapping ( + sourceTypeName: 'object', + targetTypeName: 'pkg.TargetClass') + ) + ] + ] } }