diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java index 21527417f8b..c2b670cf1de 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/SpringCodegen.java @@ -13,7 +13,6 @@ import java.io.IOException; import java.io.Writer; import java.util.*; import java.util.regex.Matcher; -import java.util.regex.Pattern; public class SpringCodegen extends AbstractJavaCodegen implements BeanValidationFeatures { diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache index 83d5957d301..76c283a7678 100644 --- a/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaSpring/apiController.mustache @@ -32,6 +32,12 @@ import javax.validation.Valid; @Controller {{#operations}} public class {{classname}}Controller implements {{classname}} { + private final ObjectMapper objectMapper; + + public {{classname}}Controller(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + {{#isDelegate}} private final {{classname}}Delegate delegate; @@ -49,11 +55,7 @@ public class {{classname}}Controller implements {{classname}} { {{^isDelegate}} {{^async}} {{#examples}} - {{#-first}} - - ObjectMapper objectMapper = new ObjectMapper(); - {{/-first}} if (accept != null && accept.contains("{{{contentType}}}")) { return new ResponseEntity<{{>returnTypes}}>(objectMapper.readValue("{{#lambdaRemoveLineBreak}}{{#lambdaEscapeDoubleQuote}}{{{example}}}{{/lambdaEscapeDoubleQuote}}{{/lambdaRemoveLineBreak}}", {{>exampleReturnTypes}}.class), HttpStatus.OK); } diff --git a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/swaggerUiConfiguration.mustache b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/swaggerUiConfiguration.mustache index f47156b68bc..b6493859fcf 100644 --- a/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/swaggerUiConfiguration.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaSpring/libraries/spring-mvc/swaggerUiConfiguration.mustache @@ -6,6 +6,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Bean; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; @@ -58,14 +59,23 @@ public class SwaggerUiConfiguration extends WebMvcConfigurerAdapter { } } + @Bean + public Jackson2ObjectMapperBuilder builder() { + Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() + .indentOutput(true) + .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .dateFormat(new RFC3339DateFormat()); + return builder; + } + @Override public void configureMessageConverters(List> converters) { - ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() - .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .dateFormat( new RFC3339DateFormat()) - .build(); - converters.add(new MappingJackson2HttpMessageConverter(objectMapper)); + converters.add(new MappingJackson2HttpMessageConverter(objectMapper())); super.configureMessageConverters(converters); } + @Bean + public ObjectMapper objectMapper(){ + return builder().build(); + } } diff --git a/samples/client/petstore-security-test/java/okhttp-gson/build.gradle b/samples/client/petstore-security-test/java/okhttp-gson/build.gradle index d7c6b63ea75..0f403ed63f3 100644 --- a/samples/client/petstore-security-test/java/okhttp-gson/build.gradle +++ b/samples/client/petstore-security-test/java/okhttp-gson/build.gradle @@ -9,8 +9,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.5.+' - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + classpath 'com.android.tools.build:gradle:2.3.+' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } @@ -25,11 +25,11 @@ if(hasProperty('target') && target == 'android') { apply plugin: 'com.github.dcendents.android-maven' android { - compileSdkVersion 23 - buildToolsVersion '23.0.2' + compileSdkVersion 25 + buildToolsVersion '25.0.2' defaultConfig { minSdkVersion 14 - targetSdkVersion 23 + targetSdkVersion 25 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/FakeApiController.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/FakeApiController.java index 5bac24daffa..10142374ba0 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/FakeApiController.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/FakeApiController.java @@ -26,11 +26,15 @@ import javax.validation.Valid; @Controller public class FakeApiController implements FakeApi { + private final ObjectMapper objectMapper; + + public FakeApiController(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + public ResponseEntity testClientModel(@ApiParam(value = "client model" ,required=true ) @Valid @RequestBody Client body, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("{ \"client\" : \"aeiou\"}", Client.class), HttpStatus.OK); diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApiController.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApiController.java index 220aa32691d..6fd43dd5ef1 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApiController.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/PetApiController.java @@ -25,6 +25,12 @@ import javax.validation.Valid; @Controller public class PetApiController implements PetApi { + private final ObjectMapper objectMapper; + + public PetApiController(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + public ResponseEntity addPet(@ApiParam(value = "Pet object that needs to be added to the store" ,required=true ) @Valid @RequestBody Pet body, @RequestHeader("Accept") String accept) { // do some magic! @@ -41,13 +47,12 @@ public class PetApiController implements PetApi { public ResponseEntity> findPetsByStatus( @NotNull @ApiParam(value = "Status values that need to be considered for filter", required = true, allowableValues = "available, pending, sold") @RequestParam(value = "status", required = true) List status, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity>(objectMapper.readValue(" 123456789 doggie aeiou aeiou", List.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity>(objectMapper.readValue("[ { \"photoUrls\" : [ \"aeiou\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"aeiou\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"aeiou\", \"id\" : 1 } ], \"status\" : \"available\"} ]", List.class), HttpStatus.OK); } @@ -58,13 +63,12 @@ public class PetApiController implements PetApi { public ResponseEntity> findPetsByTags( @NotNull @ApiParam(value = "Tags to filter by", required = true) @RequestParam(value = "tags", required = true) List tags, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity>(objectMapper.readValue(" 123456789 doggie aeiou aeiou", List.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity>(objectMapper.readValue("[ { \"photoUrls\" : [ \"aeiou\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"aeiou\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"aeiou\", \"id\" : 1 } ], \"status\" : \"available\"} ]", List.class), HttpStatus.OK); } @@ -75,13 +79,12 @@ public class PetApiController implements PetApi { public ResponseEntity getPetById(@ApiParam(value = "ID of pet to return",required=true ) @PathVariable("petId") Long petId, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity(objectMapper.readValue(" 123456789 doggie aeiou aeiou", Pet.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("{ \"photoUrls\" : [ \"aeiou\" ], \"name\" : \"doggie\", \"id\" : 0, \"category\" : { \"name\" : \"aeiou\", \"id\" : 6 }, \"tags\" : [ { \"name\" : \"aeiou\", \"id\" : 1 } ], \"status\" : \"available\"}", Pet.class), HttpStatus.OK); } @@ -108,8 +111,6 @@ public class PetApiController implements PetApi { @ApiParam(value = "file detail") @RequestPart("file") MultipartFile file, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("{ \"code\" : 0, \"type\" : \"aeiou\", \"message\" : \"aeiou\"}", ModelApiResponse.class), HttpStatus.OK); diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApiController.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApiController.java index 3eb23194cb1..b05a6c92bbf 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApiController.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/StoreApiController.java @@ -24,6 +24,12 @@ import javax.validation.Valid; @Controller public class StoreApiController implements StoreApi { + private final ObjectMapper objectMapper; + + public StoreApiController(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + public ResponseEntity deleteOrder(@ApiParam(value = "ID of the order that needs to be deleted",required=true ) @PathVariable("order_id") String orderId, @RequestHeader("Accept") String accept) { // do some magic! @@ -32,8 +38,6 @@ public class StoreApiController implements StoreApi { public ResponseEntity> getInventory(@RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/json")) { return new ResponseEntity>(objectMapper.readValue("{ \"key\" : 0}", Map.class), HttpStatus.OK); @@ -45,13 +49,12 @@ public class StoreApiController implements StoreApi { public ResponseEntity getOrderById( @Min(1) @Max(5)@ApiParam(value = "ID of pet that needs to be fetched",required=true ) @PathVariable("order_id") Long orderId, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity(objectMapper.readValue(" 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true", Order.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\"}", Order.class), HttpStatus.OK); } @@ -62,13 +65,12 @@ public class StoreApiController implements StoreApi { public ResponseEntity placeOrder(@ApiParam(value = "order placed for purchasing the pet" ,required=true ) @Valid @RequestBody Order body, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity(objectMapper.readValue(" 123456789 123456789 123 2000-01-23T04:56:07.000Z aeiou true", Order.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("{ \"petId\" : 6, \"quantity\" : 1, \"id\" : 0, \"shipDate\" : \"2000-01-23T04:56:07.000+00:00\", \"complete\" : false, \"status\" : \"placed\"}", Order.class), HttpStatus.OK); } diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApiController.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApiController.java index d8cac8d5eb8..ec36309143e 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApiController.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/api/UserApiController.java @@ -24,6 +24,12 @@ import javax.validation.Valid; @Controller public class UserApiController implements UserApi { + private final ObjectMapper objectMapper; + + public UserApiController(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + public ResponseEntity createUser(@ApiParam(value = "Created user object" ,required=true ) @Valid @RequestBody User body, @RequestHeader("Accept") String accept) { // do some magic! @@ -51,13 +57,12 @@ public class UserApiController implements UserApi { public ResponseEntity getUserByName(@ApiParam(value = "The name that needs to be fetched. Use user1 for testing. ",required=true ) @PathVariable("username") String username, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity(objectMapper.readValue(" 123456789 aeiou aeiou aeiou aeiou aeiou aeiou 123", User.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("{ \"firstName\" : \"aeiou\", \"lastName\" : \"aeiou\", \"password\" : \"aeiou\", \"userStatus\" : 6, \"phone\" : \"aeiou\", \"id\" : 0, \"email\" : \"aeiou\", \"username\" : \"aeiou\"}", User.class), HttpStatus.OK); } @@ -69,13 +74,12 @@ public class UserApiController implements UserApi { @NotNull @ApiParam(value = "The password for login in clear text", required = true) @RequestParam(value = "password", required = true) String password, @RequestHeader("Accept") String accept) throws IOException { // do some magic! - - ObjectMapper objectMapper = new ObjectMapper(); if (accept != null && accept.contains("application/xml")) { return new ResponseEntity(objectMapper.readValue("aeiou", String.class), HttpStatus.OK); } + if (accept != null && accept.contains("application/json")) { return new ResponseEntity(objectMapper.readValue("\"aeiou\"", String.class), HttpStatus.OK); } diff --git a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java index e05672181db..af1f1da2b60 100644 --- a/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java +++ b/samples/server/petstore/spring-mvc/src/main/java/io/swagger/configuration/SwaggerUiConfiguration.java @@ -6,6 +6,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Bean; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; @@ -58,14 +59,23 @@ public class SwaggerUiConfiguration extends WebMvcConfigurerAdapter { } } + @Bean + public Jackson2ObjectMapperBuilder builder() { + Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() + .indentOutput(true) + .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .dateFormat(new RFC3339DateFormat()); + return builder; + } + @Override public void configureMessageConverters(List> converters) { - ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() - .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .dateFormat( new RFC3339DateFormat()) - .build(); - converters.add(new MappingJackson2HttpMessageConverter(objectMapper)); + converters.add(new MappingJackson2HttpMessageConverter(objectMapper())); super.configureMessageConverters(converters); } + @Bean + public ObjectMapper objectMapper(){ + return builder().build(); + } }