Comment intégrer swagger ui dans apache cxf jax-rest api dans une application de démarrage?Comment intégrer swagger dans apache cxf jax-rest api dans une application de démarrage à ressort?
Comment intégrer swagger dans apache cxf jax-rest api dans une application de démarrage à ressort?
Répondre
Je suis d'édition d'un blog avec une démo, en fait la démonstration est terminée sur ce sujet précis et un extrait du code source ici:
Modifié: Vient de paraître Implementing APIs using Spring Boot, CXF and Swagger
pom. xml:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-service-description</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-service-description-swagger</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>${swagger-ui.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
classe principale:
DemoCxfApplication.java:
@SpringBootApplication(scanBasePackages = { "com.example.demo.rest" })
public class DemoCxfApplication {
public static void main(String[] args) {
SpringApplication.run(DemoCxfApplication.class, args);
}
}
classes de configuration:
FeaturesConfig.java:
package com.example.demo.rest.config;
...
@Configuration
public class FeaturesConfig {
@Value("${cxf.path}")
private String basePath;
@Bean("swagger2Feature")
public Feature swagger2Feature() {
Swagger2Feature result = new Swagger2Feature();
result.setTitle("Spring Boot + CXF + Swagger + Docker Example");
result.setDescription("Spring Boot + CXF + Swagger + Docker Example description");
result.setBasePath(this.basePath);
result.setVersion("v1");
result.setSchemes(new String[] { "http", "https" });
result.setPrettyPrint(true);
return result;
}
}
ProvidersConfig.java:
package com.example.demo.rest.config;
...
@Provider
@Configuration
public class ProvidersConfig {
@Bean
public JacksonJsonProvider jsonProvider() {
return new JacksonJsonProvider();
}
}
Interface des ressources et la mise en œuvre:
HelloResource.java
package com.example.demo.rest.v1;
...
@Path("/")
@Api(value = "Hello resource Version 1", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface HelloResource {
@GET
@Path("v1/hello/{name}")
@ApiOperation(value = "Gets a hello resource. Version 1 - (version in URL)")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Hello resource found", response = Hello.class),
@ApiResponse(code = 404, message = "Hello resource not found")
})
Response getHelloVersionInUrl(@PathParam("name") @ApiParam(value = "The name") String name);
...
}
HelloResourceImpl.java
package com.example.demo.rest.v1.impl;
...
// No JAX-RS annotation in class, method or method arguments
@Component("helloResourceV1")
public class HelloResourceImpl implements HelloResource {
@Override
public Response getHelloVersionInUrl(String name) {
LOGGER.info("getHelloVersionInUrl() v1");
return this.getHello(name, "Version 1 - passed in URL");
}
...
}
fichier de propriétés:
application.yml
# Spring MVC dispatcher servlet path. Needs to be different than CXF's to enable/disable Actuator endpoints access (/info, /health, ...)
server.servlet-path:/
management.security.enabled: false
# http://cxf.apache.org/docs/springboot.html#SpringBoot-SpringBootCXFJAX-RSStarter
cxf:
path: /api # CXFServlet URL pattern
jaxrs:
component-scan: true
Swagger UI
disponible à: http://<host:port>/api/api-docs?url=/api/swagger.json
WADL
disponible à: http://<host:port>/api?_wadl
Intéressant, décliné sans raison apparente. – ootero
S'il vous plaît envisager de lire https://stackoverflow.com/help/how-to-ask. Des questions comme celles-ci sont trop générales pour ce site. Vous trouverez des blogs entiers et des manuels dédiés à répondre à cette question. –
Ceci est couvert dans de nombreux tutoriels, vous devez donc expliquer quel problème spécifique vous avez rencontré. – csmckelvey