Comparez les prix des domaines et des services informatiques des vendeurs du monde entier

Réglage Swagger UI avec Spring Boot

J'essaie de configurer Swagger UI Avec ma demande Spring boot. Bien que
v2/api-docs

, Il semble chargé correctement,
[url=http://localhost:8080/swagger-ui.html]http://localhost:8080/swagger-ui.html[/url]

Ne pas charger mon annoté REST API.

C'est ce que j'ai:

pom.xml

:


...
Swagger UI
<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger2</artifactid>
<version>2.6.1</version>
</dependency>
<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger-ui</artifactid>
<version>2.4.0</version>
</dependency>
...


SwaggerConfig.java


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;

import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
public class SwaggerConfig
{
@Bean
public Docket api//
{
return new Docket/DocumentationType.SWAGGER_2/
.select//
.apis/RequestHandlerSelectors.any///
.paths/regex/"/.*"//
.build//.apiInfo/apiInfo///;
}

private ApiInfo apiInfo//
{
ApiInfo apiInfo = new ApiInfo/
"My Project's REST API",
"This is a description of your API.",
"version-1",
"API TOS",
"me@wherever.com",
"API License",
"API License URL"
/;
return apiInfo;
}
}



[url=http://localhost:8080/v2/api-docs]http://localhost:8080/v2/api-docs[/url]


:


{"swagger":"2.0","info":{"description":"This is a description of your API.","version":"version-1","title":"My Project's REST API","termsOfService":"API TOS","contact":{"name":"me@wherever.com"},"license":{"name":"API License","url":"API License URL"}},"host":"localhost:8080","basePath":"/","tags":[{"name":"test-controller","description":"Test Controller"},{"name":"custom-field-controller","description":"Custom Field Controller"},{"name":"user-controller","description":"User Controller"},{"name":"users-controller","description":"Users Controller"},{"name":"crudapi-controller","description":"CRUDAPI Controller"},{"name":"basic-error-controller","description":"Basic Error Controller"}],"paths":{"/":{"get":{"tags":["crudapi-controller"],"summary":"greeting","operationId":"greetingUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/javainuse":{"get":{"tags":["test-controller"],"summary":"firstPage","operationId":"firstPageUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/error":{"get":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingGET","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"head":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingHEAD","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}},"post":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingPOST","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingPUT","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingDELETE","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}},"options":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingOPTIONS","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}},"patch":{"tags":["basic-error-controller"],"summary":"errorHtml","operationId":"errorHtmlUsingPATCH","consumes":["application/json"],"produces":["text/html"],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ModelAndView"}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/fields":{"get":{"tags":["custom-field-controller"],"summary":"greeting","operationId":"greetingUsingGET_1","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/fields/{id}":{"get":{"tags":["custom-field-controller"],"summary":"fieldAPIController","operationId":"fieldAPIControllerUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/CustomField"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/users":{"get":{"tags":["user-controller"],"summary":"greeting","operationId":"greetingUsingGET_2","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/users/":{"get":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingGET","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"head":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingHEAD","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}},"post":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingPOST","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"put":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingPUT","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}},"delete":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingDELETE","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}},"options":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingOPTIONS","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}},"patch":{"tags":["users-controller"],"summary":"listUsers","operationId":"listUsersUsingPATCH","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/UserJPA"}}},"401":{"description":"Unauthorized"},"204":{"description":"No Content"},"403":{"description":"Forbidden"}}}},"/users/{id}":{"get":{"tags":["user-controller"],"summary":"userAPIController","operationId":"userAPIControllerUsingGET","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Collection«UserJPA»"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}},"definitions":{"UserJPA":{"type":"object"},"Collection«UserJPA»":{"type":"object"},"ModelAndView":{"type":"object","properties":{"empty":{"type":"boolean"},"model":{"type":"object"},"modelMap":{"type":"object","additionalProperties":{"type":"object"}},"reference":{"type":"boolean"},"status":{"type":"string","enum":["100","101","102","103","200","201","202","203","204","205","206","207","208","226","300","301","302","303","304","305","307","308","400","401","402","403","404","405","406","407","408","409","410","411","412","413","414","415","416","417","418","419","420","421","422","423","424","426","428","429","431","451","500","501","502","503","504","505","506","507","508","509","510","511"]},"view":{"$ref":"#/definitions/View"},"viewName":{"type":"string"}}},"CustomField":{"type":"object","properties":{"name":{"type":"string"}}},"View":{"type":"object","properties":{"contentType":{"type":"string"}}}}}


swagger-ui.html /
[url=http://localhost:8080/swagger-ui.html]http://localhost:8080/swagger-ui.html[/url]

/ ne montre pas les appels attendus REST:
https://i.stack.imgur.com/VzzFx.png
Une erreur dans
swagger-ui.html

Du code de vérification:
Failed to load resource: the server responded with a status of 404 //

.

J'ai googlé autour /j'ai essayé web-config mvc également/, Mais l'erreur est préservée. Peut-être me manque le lien vers la ressource dans le fichier .iml?
Invité:

Gaspard

Confirmation de:

Aujourd'hui, j'ai eu ce problème et je l'ai corrigé en comparant la version de mes dépendances
springfox-swagger2

et
springfox-swagger-ui

:


<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger2</artifactid>
<version>2.6.1</version>
</dependency>
<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger-ui</artifactid>
<version>2.6.1</version>
</dependency>


Il y a très peu d'autre code pour le gérer et courir. Une classe de configuration simple:


@Configuration
@EnableSwagger2
class SwaggerConfiguration {

@Bean
public Docket api// {
return new Docket/DocumentationType.SWAGGER_2/
.select//
.apis/RequestHandlerSelectors.basePackage/"com.foo.samples.swaggersample"//
.paths/PathSelectors.any///
.build//;
}

}


Et le mien application.properties


# location of the swagger json
springfox.documentation.swagger.v2.path=/swagger.json


/C'est B. Spring Boot/.

Camille

Confirmation de:

Déclaration: générer Swagger UI Pour allumer toutes les applications de REST APIs avant que Spring Boot.

Suivez ces étapes pour générer une application de
Swagger UI

avant que Spring Boot:

1.

Ajouter la dépendance suivante dans pom.xml –


<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger2</artifactid>
<version>2.6.1</version>
</dependency>
<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger-ui</artifactid>
<version>2.6.1</version>
</dependency>


2.

Ajoutez l'extrait de code suivant dans votre classe d'applications principale avec Annotation. @EnableSwagger2.


@EnableSwagger2
@SpringBootApplication
public class MyApp {
public static void main/String[] args/ {
SpringApplication.run/MyApp.class, args/;
}

@Bean
public Docket api// {
return new Docket/DocumentationType.SWAGGER_2/.select//
.apis/RequestHandlerSelectors.withClassAnnotation/Api.class//
.paths/PathSelectors.any///.build//.pathMapping/"/"/
.apiInfo/apiInfo///.useDefaultResponseMessages/false/;
}

@Bean
public ApiInfo apiInfo// {
final ApiInfoBuilder builder = new ApiInfoBuilder//;
builder.title/"My Application API through Swagger UI"/.version/"1.0"/.license/"/C/ Copyright Test"/
.description/"List of all the APIs of My Application App through Swagger UI"/;
return builder.build//;
}
}


3.

Ajouter le cours ci-dessous RootController dans votre code pour la rediriger vers la page Swagger UI. Donc, vous n'avez pas besoin de mettre le dossier dist Swagger-UI dans le répertoire des ressources.


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping/"/"/
public class RootController {
@RequestMapping/method = RequestMethod.GET/
public String swaggerUi// {
return "redirect:/swagger-ui.html";
}
}


4.

Étapes de conclusion, ajouter une notation @Api et @ApiOperation Dans tous les vôtres RESTControllers, Comme indiqué ci-dessous –


import static org.springframework.web.bind.annotation.RequestMethod.GET;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping/"/hello"/
@Api/value = "hello", description = "Sample hello world application"/
public class TestController {

@ApiOperation/value = "Just to test the sample test api of My App Service"/
@RequestMapping/method = RequestMethod.GET, value = "/test"/
// @Produces/MediaType.APPLICATION_JSON/
public String test// {
return "Hello to check Swagger UI";
}

@ResponseStatus/HttpStatus.OK/
@RequestMapping/value = "/test1", method = GET/
@ApiOperation/value = "My App Service get test1 API", position = 1/
public String test1// {
System.out.println/"Testing"/;
if /true/ {
return "Tanuj";
}
return "Gupta";
}
}


Maintenant, votre entreprise est terminée. Maintenant pour lancer l'application Spring Boot, Allez sur le navigateur et entrez
localhost:8080

. Vous verrez que
Swagger UI

Il a tous les détails de votre REST APIs.

Codage heureux.

Le code source de la mise en œuvre ci-dessus est également dans mon
https://guptakumartanuj.wordpr ... tion/
, Si vous voulez vérifier.

Christine

Confirmation de:

Ajouter une telle classe de configuration


@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {

@Override
public void addResourceHandlers/final ResourceHandlerRegistry registry/ {
// Make Swagger meta-data available via <baseurl>/v2/api-docs/
registry.addResourceHandler/"/webjars/**"/.addResourceLocations/"classpath:/META-INF/resources/webjars/"/;
// Make Swagger UI available via <baseurl>/swagger-ui.html
registry.addResourceHandler/"/**"/.addResourceLocations/"classpath:/META-INF/resources/"/;
}
}


</baseurl></baseurl>

Edmond

Confirmation de:

La meilleure façon de configurer swagger Dans votre application - Ceci est le premier à ajouter


<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger2</artifactid>
<version>2.6.1</version>
</dependency>
<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-swagger-ui</artifactid>
<version>2.6.1</version>
</dependency>


à pom.xml an

puis ajouter plugin plugin


<plugin>
<groupid>com.github.kongchen</groupid>
<artifactid>swagger-maven-plugin</artifactid>
<version>3.1.5</version>
<configuration>
<apisources>
<apisource>
<springmvc>true</springmvc>
<locations>com.sandy2friends.test.web.rest</locations>
<info>
<title>REST API</title>
<version>1</version>
<description>REST API</description>
</info>
<swaggerdirectory>swagger</swaggerdirectory>
<swaggerfilename>rest api</swaggerfilename>
</apisource>
</apisources>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>


https://github.com/kongchen/swagger-maven-plugin
Cette configuration créera automatiquement un fichier. swagger json et configurer l'interface utilisateur swagger Dans votre application.

Pour répondre aux questions, connectez-vous ou registre