From 6d32092dcf28141d033eae62aa58d527541288e4 Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 7 Mar 2020 17:21:17 +0100 Subject: [PATCH] refine swagger example --- .../mops/gruppen2/Gruppen2Application.java | 26 +++++++++- .../controller/SwaggerAPIController.java | 31 ------------ .../SwaggerAPIControllerExample.java | 47 +++++++++++++++++++ .../domain/ProductSwaggerExample.java | 12 +++++ .../gruppen2/security/SecurityConfig.java | 2 - src/main/resources/application-dev.properties | 1 - 6 files changed, 83 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/mops/gruppen2/controller/SwaggerAPIController.java create mode 100644 src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java create mode 100644 src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java diff --git a/src/main/java/mops/gruppen2/Gruppen2Application.java b/src/main/java/mops/gruppen2/Gruppen2Application.java index 71aa410..0861b85 100644 --- a/src/main/java/mops/gruppen2/Gruppen2Application.java +++ b/src/main/java/mops/gruppen2/Gruppen2Application.java @@ -3,11 +3,16 @@ package mops.gruppen2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.util.Collections; + @SpringBootApplication @EnableSwagger2 public class Gruppen2Application { @@ -17,7 +22,24 @@ public class Gruppen2Application { @Bean public Docket productAPI() { - return new Docket(DocumentationType.SWAGGER_2).select() - .apis(RequestHandlerSelectors.basePackage("mops.gruppen2")).build(); + return new Docket(DocumentationType.SWAGGER_2) + .select() + .paths(PathSelectors.ant("/products/**")) + .apis(RequestHandlerSelectors.basePackage("mops.gruppen2")) + .build() + .apiInfo(apiMetadata()); + } + + private ApiInfo apiMetadata() { + return new ApiInfo( + "Gruppenbildung API", + "API zum anfragen/aktualisieren der Gruppendaten.", + "0.0.1", + "Free to use", + new Contact("gruppen2", "https://github.com/hhu-propra2/abschlussprojekt-it-bois", ""), + "", + "", + Collections.emptyList() + ); } } diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java deleted file mode 100644 index f1d0a10..0000000 --- a/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java +++ /dev/null @@ -1,31 +0,0 @@ -package mops.gruppen2.controller; - - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; - -@RestController -public class SwaggerAPIController { - - /** - * Ein Beispiel für eine API mit Swagger. - * - * @return Eine Liste von Produkten, repräsentiert durch Strings - */ - @RequestMapping(value = "/products", method = RequestMethod.GET) - public List getProducts() { - List productList = new ArrayList<>(); - productList.add("Honey"); - productList.add("Almond"); - return productList; - } - - @RequestMapping(value = "/products", method = RequestMethod.POST) - public String createProduct() { - return "Product is saved successfully"; - } -} diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java new file mode 100644 index 0000000..b186b9e --- /dev/null +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java @@ -0,0 +1,47 @@ +package mops.gruppen2.controller; + + +import com.github.javafaker.Faker; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import mops.gruppen2.domain.ProductSwaggerExample; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * Ein Beispiel für eine API mit Swagger. + */ +@RestController +@RequestMapping("/products") +public class SwaggerAPIControllerExample { + + private final Faker faker = new Faker(); + private final List products = new ArrayList<>(); + + @GetMapping("/get/all") + @ApiOperation(value = "Erzeugt eine Liste mit allen gespeicherten Produkten") + public List getProducts() { + return products; + } + + @GetMapping("/get/{index}") + public ProductSwaggerExample getProduct(@ApiParam("Produkt Index") @PathVariable int index) { + return products.get(index); + } + + @PostMapping("/save") + public String saveProduct(@RequestBody ProductSwaggerExample product) { + products.add(product); + + return "Product saved successfully"; + } + + @PostMapping("/random") + public String saveRandomProduct() { + products.add(new ProductSwaggerExample(faker.food().ingredient(), "Empty")); + + return "Product saved successfully"; + } +} diff --git a/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java b/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java new file mode 100644 index 0000000..14f50dd --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java @@ -0,0 +1,12 @@ +package mops.gruppen2.domain; + +import lombok.Value; + +// @ApiModelProperty +@Value +public class ProductSwaggerExample { + + // @ApiModelProperty + String name; + String description; +} diff --git a/src/main/java/mops/gruppen2/security/SecurityConfig.java b/src/main/java/mops/gruppen2/security/SecurityConfig.java index da56f84..8816b24 100644 --- a/src/main/java/mops/gruppen2/security/SecurityConfig.java +++ b/src/main/java/mops/gruppen2/security/SecurityConfig.java @@ -74,8 +74,6 @@ class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { http.headers().frameOptions().disable(); } - - /** * Declaring this class enables us to use the Spring specific * {@link org.springframework.security.access.annotation.Secured} annotation diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index a7ff497..3ad4107 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -14,4 +14,3 @@ keycloak.auth-server-url=https://keycloak.cs.hhu.de/auth keycloak.realm=MOPS keycloak.resource=demo keycloak.public-client=true -