From d7922bb958e6e9546c7758c4430534ffc4980c7e Mon Sep 17 00:00:00 2001 From: richard Date: Fri, 12 Jul 2019 11:48:28 +0300 Subject: [PATCH] Configured spring fox with swagger2 --- build.gradle | 2 + .../banking/api/config/SwaggerConfig.java | 48 +++++++++++++++++++ .../CustomerOperationsController.java | 17 ++++++- 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 src/main/java/banking/api/config/SwaggerConfig.java diff --git a/build.gradle b/build.gradle index 0470473..3ea2bcf 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,8 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web:2.0.5.RELEASE' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0' implementation 'com.h2database:h2:1.4.197' + implementation 'io.springfox:springfox-swagger2:2.6.1' + implementation 'io.springfox:springfox-swagger-ui:2.6.1' testImplementation 'org.springframework.boot:spring-boot-starter-test:2.0.5.RELEASE' diff --git a/src/main/java/banking/api/config/SwaggerConfig.java b/src/main/java/banking/api/config/SwaggerConfig.java new file mode 100644 index 0000000..71e83fc --- /dev/null +++ b/src/main/java/banking/api/config/SwaggerConfig.java @@ -0,0 +1,48 @@ +package banking.api.config; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket produceApi() { + + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("banking.api.controllers")) + .paths(paths()) + .build(); + } + + // Describe your apis + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Banking Rest APIs") + .description("This page lists all the rest apis for Banking API") + .version("1.0-SNAPSHOT") + .build(); + } + + // Only select apis that matches the given Predicates. + private Predicate paths() { + // Match all paths except /error + return Predicates.and( + PathSelectors.regex("/customer.*"), + Predicates.not(PathSelectors.regex("/error.*")) + ); + } +} diff --git a/src/main/java/banking/api/controllers/CustomerOperationsController.java b/src/main/java/banking/api/controllers/CustomerOperationsController.java index dea492a..e42fc37 100644 --- a/src/main/java/banking/api/controllers/CustomerOperationsController.java +++ b/src/main/java/banking/api/controllers/CustomerOperationsController.java @@ -20,7 +20,13 @@ import banking.api.response.models.GenericResponse; import banking.api.services.CustomerOperationsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; + @RestController +@Api(value="/customer",description="Customer Profile",produces ="application/json") public class CustomerOperationsController { @Autowired @@ -33,8 +39,15 @@ public class CustomerOperationsController { public String welcomeMessage() { return Messages.WELCOME_MSG; } - - + + + + @ApiOperation(value="get balance",response=Customer.class) + @ApiResponses(value={ + @ApiResponse(code=200,message="Customer Details Retrieved",response=GenericResponse.class), + @ApiResponse(code=500,message="Internal Server Error"), + @ApiResponse(code=404,message="Customer not found") + }) @GetMapping("/customer/balance/{nationalIdNum}") public GenericResponse checkBalance(@PathVariable("nationalIdNum") Long nationalIdNum ) { BigDecimal accountBalance = null;