Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 90a8c7b

Browse files
committed
Autowired the ObjectMapper ...
Set up components that have the object mapper wired in as a dependency fixes springfox#272
1 parent 77d00ca commit 90a8c7b

10 files changed

Lines changed: 65 additions & 37 deletions

File tree

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
<configuration>
190190
<excludes>
191191
<exclude>**/com/mangofactory/swagger/configuration/**SpringSwaggerConfig.*</exclude>
192+
<exclude>**/com/mangofactory/swagger/models/configuration/**SwaggerModelsConfiguration.*</exclude>
192193
<exclude>**/com/mangofactory/swagger/scanners/**ResourceGroups.*</exclude>
193194
<!-- TODO: REMOVE when we delete this class -->
194195
<exclude>**/com/mangofactory/swagger/models/**SwaggerModelProvider.*</exclude>

swagger-models/src/main/java/com/mangofactory/swagger/models/AccessorsProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import com.google.common.base.Preconditions;
1111
import com.google.common.base.Predicate;
1212
import com.google.common.collect.FluentIterable;
13+
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.stereotype.Component;
1315

1416
import java.lang.reflect.Method;
1517
import java.util.List;
@@ -18,12 +20,14 @@
1820

1921
import static com.google.common.collect.Lists.newArrayList;
2022

23+
@Component
2124
public class AccessorsProvider {
2225
private static Pattern getter = Pattern.compile("^get([a-zA-Z_0-9].*)");
2326
private static Pattern isGetter = Pattern.compile("^is([a-zA-Z_0_9].*)");
2427
private static Pattern setter = Pattern.compile("^set([a-zA-Z_0-9].*)");
2528

2629
private TypeResolver typeResolver;
30+
@Autowired
2731
public AccessorsProvider(TypeResolver typeResolver) {
2832
this.typeResolver = typeResolver;
2933
}

swagger-models/src/main/java/com/mangofactory/swagger/models/DefaultModelProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.wordnik.swagger.model.Model;
88
import com.wordnik.swagger.model.ModelProperty;
99
import com.wordnik.swagger.model.ModelRef;
10+
import org.springframework.beans.factory.annotation.Autowired;
1011
import org.springframework.core.annotation.AnnotationUtils;
1112
import org.springframework.stereotype.Component;
1213
import scala.Option;
@@ -29,6 +30,7 @@ public class DefaultModelProvider implements ModelProvider {
2930
private final ModelPropertiesProvider propertiesProvider;
3031
private final ModelDependencyProvider dependencyProvider;
3132

33+
@Autowired
3234
public DefaultModelProvider(TypeResolver resolver, ModelPropertiesProvider propertiesProvider,
3335
ModelDependencyProvider dependencyProvider) {
3436
this.resolver = resolver;

swagger-models/src/main/java/com/mangofactory/swagger/models/FieldsProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
import com.fasterxml.classmate.ResolvedTypeWithMembers;
66
import com.fasterxml.classmate.TypeResolver;
77
import com.fasterxml.classmate.members.ResolvedField;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.stereotype.Component;
810

9-
import static com.google.common.collect.Lists.newArrayList;
11+
import static com.google.common.collect.Lists.*;
1012

13+
@Component
1114
public class FieldsProvider {
1215
private final TypeResolver typeResolver;
1316

17+
@Autowired
1418
public FieldsProvider(TypeResolver typeResolver) {
1519
this.typeResolver = typeResolver;
1620
}

swagger-models/src/main/java/com/mangofactory/swagger/models/ModelDependencyProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@
44
import com.fasterxml.classmate.TypeResolver;
55
import com.google.common.base.Predicate;
66
import com.google.common.collect.FluentIterable;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.stereotype.Component;
79

810
import java.util.List;
911
import java.util.Set;
1012

1113
import static com.google.common.collect.Lists.*;
1214
import static com.mangofactory.swagger.models.ResolvedTypes.*;
1315

16+
@Component
1417
public class ModelDependencyProvider {
1518

1619
private final TypeResolver typeResolver;
1720
private final ModelPropertiesProvider propertiesProvider;
1821

22+
@Autowired
1923
public ModelDependencyProvider(TypeResolver typeResolver, ModelPropertiesProvider propertiesProvider) {
2024
this.typeResolver = typeResolver;
2125
this.propertiesProvider = propertiesProvider;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.mangofactory.swagger.models.configuration;
2+
3+
import com.fasterxml.classmate.TypeResolver;
4+
import com.mangofactory.swagger.models.FieldsProvider;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.ComponentScan;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
@Configuration
10+
@ComponentScan(basePackageClasses = { FieldsProvider.class })
11+
public class SwaggerModelsConfiguration {
12+
@Bean
13+
public TypeResolver typeResolver() {
14+
return new TypeResolver();
15+
}
16+
}

swagger-springmvc/src/main/java/com/mangofactory/swagger/configuration/SpringSwaggerConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
import com.mangofactory.swagger.core.SwaggerPathProvider;
1010
import com.mangofactory.swagger.models.alternates.AlternateTypeProvider;
1111
import com.mangofactory.swagger.models.alternates.WildcardType;
12+
import com.mangofactory.swagger.models.configuration.SwaggerModelsConfiguration;
1213
import com.wordnik.swagger.model.ResponseMessage;
1314
import org.springframework.beans.factory.annotation.Autowired;
1415
import org.springframework.context.annotation.Bean;
1516
import org.springframework.context.annotation.ComponentScan;
1617
import org.springframework.context.annotation.Configuration;
18+
import org.springframework.context.annotation.Import;
1719
import org.springframework.http.HttpHeaders;
1820
import org.springframework.validation.BindingResult;
1921
import org.springframework.web.bind.annotation.RequestMethod;
@@ -42,6 +44,7 @@
4244

4345
@Configuration
4446
@ComponentScan(basePackages = { "com.mangofactory.swagger.controllers" })
47+
@Import(SwaggerModelsConfiguration.class)
4548
public class SpringSwaggerConfig {
4649

4750
@Autowired

swagger-springmvc/src/main/java/com/mangofactory/swagger/core/SwaggerApiResourceListing.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
package com.mangofactory.swagger.core;
22

3-
import com.fasterxml.classmate.TypeResolver;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
53
import com.mangofactory.swagger.authorization.AuthorizationContext;
64
import com.mangofactory.swagger.configuration.SwaggerGlobalSettings;
7-
import com.mangofactory.swagger.models.AccessorsProvider;
8-
import com.mangofactory.swagger.models.DefaultModelPropertiesProvider;
9-
import com.mangofactory.swagger.models.DefaultModelProvider;
10-
import com.mangofactory.swagger.models.FieldsProvider;
11-
import com.mangofactory.swagger.models.ModelDependencyProvider;
5+
import com.mangofactory.swagger.models.ModelProvider;
126
import com.mangofactory.swagger.scanners.ApiListingReferenceScanner;
137
import com.mangofactory.swagger.scanners.ApiListingScanner;
148
import com.mangofactory.swagger.scanners.RequestMappingContext;
@@ -40,8 +34,9 @@ public class SwaggerApiResourceListing {
4034
private SwaggerPathProvider swaggerPathProvider;
4135
private SwaggerGlobalSettings swaggerGlobalSettings;
4236
private String swaggerGroup;
37+
private ModelProvider modelProvider;
4338

44-
public SwaggerApiResourceListing(SwaggerCache swaggerCache, String swaggerGroup) {
39+
public SwaggerApiResourceListing(SwaggerCache swaggerCache, String swaggerGroup) {
4540
this.swaggerCache = swaggerCache;
4641
this.swaggerGroup = swaggerGroup;
4742
}
@@ -55,14 +50,6 @@ public void initialize() {
5550

5651
Map<ResourceGroup, List<RequestMappingContext>> resourceGroupRequestMappings =
5752
apiListingReferenceScanner.getResourceGroupRequestMappings();
58-
59-
TypeResolver typeResolver = swaggerGlobalSettings.getTypeResolver();
60-
DefaultModelPropertiesProvider propertiesProvider
61-
= new DefaultModelPropertiesProvider(new ObjectMapper(), //DK TODO: Autowire this
62-
new AccessorsProvider(typeResolver), new FieldsProvider(typeResolver));
63-
ModelDependencyProvider dependencyProvider = new ModelDependencyProvider(typeResolver, propertiesProvider);
64-
DefaultModelProvider modelProvider = new DefaultModelProvider(typeResolver, propertiesProvider,
65-
dependencyProvider);
6653
ApiListingScanner apiListingScanner = new ApiListingScanner(resourceGroupRequestMappings, swaggerPathProvider,
6754
modelProvider, authorizationContext);
6855
apiListingScanner.setSwaggerGlobalSettings(swaggerGlobalSettings);
@@ -145,4 +132,8 @@ public void setSwaggerGroup(String swaggerGroup) {
145132
public void setAuthorizationContext(AuthorizationContext authorizationContext) {
146133
this.authorizationContext = authorizationContext;
147134
}
135+
136+
public void setModelProvider(ModelProvider modelProvider) {
137+
this.modelProvider = modelProvider;
138+
}
148139
}

swagger-springmvc/src/test/groovy/com/mangofactory/swagger/configuration/SwaggerApiResourceListingSpec.groovy

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
package com.mangofactory.swagger.configuration
22

3+
import com.fasterxml.classmate.TypeResolver
4+
import com.fasterxml.jackson.databind.ObjectMapper
35
import com.mangofactory.swagger.core.ClassOrApiAnnotationResourceGrouping
4-
import com.mangofactory.swagger.core.SwaggerApiResourceListing
56
import com.mangofactory.swagger.core.DefaultSwaggerPathProvider
7+
import com.mangofactory.swagger.core.SwaggerApiResourceListing
68
import com.mangofactory.swagger.core.SwaggerCache
9+
import com.mangofactory.swagger.models.*
710
import com.mangofactory.swagger.scanners.ApiListingReferenceScanner
811
import com.wordnik.swagger.core.SwaggerSpec
9-
import com.wordnik.swagger.model.ApiInfo
10-
import com.wordnik.swagger.model.ApiKey
11-
import com.wordnik.swagger.model.ApiListing
12-
import com.wordnik.swagger.model.ApiListingReference
13-
import com.wordnik.swagger.model.AuthorizationType
14-
import com.wordnik.swagger.model.ResourceListing
12+
import com.wordnik.swagger.model.*
1513
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
1614
import spock.lang.Specification
1715

1816
import javax.servlet.ServletContext
1917

20-
import static com.mangofactory.swagger.ScalaUtils.fromOption
21-
import static com.mangofactory.swagger.ScalaUtils.fromScalaList
18+
import static com.mangofactory.swagger.ScalaUtils.*
2219

2320
@Mixin(com.mangofactory.swagger.mixins.RequestMappingSupport)
2421
class SwaggerApiResourceListingSpec extends Specification {
@@ -109,6 +106,13 @@ class SwaggerApiResourceListingSpec extends Specification {
109106
settings.alternateTypeProvider = springSwaggerConfig.defaultAlternateTypeProvider();
110107
swaggerApiResourceListing.setSwaggerGlobalSettings(settings)
111108

109+
def resolver = new TypeResolver()
110+
def modelPropertiesProvider = new DefaultModelPropertiesProvider(new ObjectMapper(), new AccessorsProvider(resolver),
111+
new FieldsProvider(resolver))
112+
def modelDependenciesProvider = new ModelDependencyProvider(resolver, modelPropertiesProvider)
113+
ModelProvider modelProvider = new DefaultModelProvider(resolver, modelPropertiesProvider,
114+
modelDependenciesProvider)
115+
112116
Map handlerMethods = [(requestMappingInfo("somePath/")): dummyHandlerMethod()]
113117
def requestHandlerMapping = Mock(RequestMappingHandlerMapping)
114118
requestHandlerMapping.getHandlerMethods() >> handlerMethods
@@ -119,7 +123,7 @@ class SwaggerApiResourceListingSpec extends Specification {
119123
scanner.setSwaggerGroup("swaggerGroup")
120124

121125
scanner.setSwaggerPathProvider(swaggerPathProvider)
122-
126+
swaggerApiResourceListing.setModelProvider(modelProvider)
123127
swaggerApiResourceListing.setApiListingReferenceScanner(scanner)
124128

125129
when:

swagger-springmvc/src/test/groovy/com/mangofactory/swagger/integration/ServicesConfiguration.groovy

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
package com.mangofactory.swagger.integration
22
import com.fasterxml.jackson.databind.ObjectMapper
3-
import com.fasterxml.jackson.module.scala.DefaultScalaModule
43
import com.mangofactory.swagger.authorization.AuthorizationContext
54
import com.mangofactory.swagger.configuration.JacksonScalaSupport
65
import com.mangofactory.swagger.configuration.SpringSwaggerConfig
76
import com.mangofactory.swagger.configuration.SwaggerGlobalSettings
87
import com.mangofactory.swagger.core.DefaultSwaggerPathProvider
98
import com.mangofactory.swagger.core.SwaggerApiResourceListing
109
import com.mangofactory.swagger.core.SwaggerPathProvider
10+
import com.mangofactory.swagger.models.ModelProvider
1111
import com.mangofactory.swagger.scanners.ApiListingReferenceScanner
1212
import com.wordnik.swagger.model.*
1313
import org.springframework.beans.factory.annotation.Autowired
1414
import org.springframework.context.annotation.Bean
1515
import org.springframework.context.annotation.ComponentScan
1616
import org.springframework.context.annotation.Configuration
1717
import org.springframework.context.annotation.Import
18-
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
1918
import org.springframework.web.servlet.config.annotation.EnableWebMvc
2019

2120
import javax.servlet.ServletContext
@@ -35,6 +34,8 @@ public class ServicesConfiguration {
3534
private SpringSwaggerConfig springSwaggerConfig;
3635
@Autowired
3736
private ServletContext servletContext;
37+
@Autowired
38+
private ModelProvider modelProvider;
3839

3940
/**
4041
* Adds the jackson scala module to the MappingJackson2HttpMessageConverter registered with spring
@@ -51,14 +52,9 @@ public class ServicesConfiguration {
5152

5253
@Bean
5354
public ObjectMapper objectMapper() {
54-
def jackson2 = new MappingJackson2HttpMessageConverter()
55-
56-
ObjectMapper mapper = new ObjectMapper()
57-
mapper.registerModule(new DefaultScalaModule())
58-
mapper.registerModule(jacksonScalaSupport().swaggerSerializationModule())
59-
60-
jackson2.setObjectMapper(mapper)
61-
return mapper;
55+
//This is the opportunity to override object mapper behavior
56+
//return springSwaggerConfig.objectMapperSupport().getObjectMapper();
57+
return new ObjectMapper();
6258
}
6359

6460
// @Bean
@@ -111,6 +107,9 @@ public class ServicesConfiguration {
111107
//Use a custom path provider or springSwaggerConfig.defaultSwaggerPathProvider()
112108
swaggerApiResourceListing.setSwaggerPathProvider(testPathProvider());
113109

110+
// Set the model provider, uses the default autowired model provider.
111+
swaggerApiResourceListing.setModelProvider(modelProvider);
112+
114113
//Supply the API Info as it should appear on swagger-ui web page
115114
swaggerApiResourceListing.setApiInfo(apiInfo());
116115

0 commit comments

Comments
 (0)