2017-06-24 3 views
1

Dies ist mein erstes Mal hier. Also haben wir eine Anwendung, die in Spring MVC erstellt wurde, die REST-Aufrufe mit 2 Java-Klassen behandelt, die als Controller dienen. Einer von ihnen ist explizit mit @Controller annotiert, während der andere mit @Component annotiert ist. (2 leicht unterschiedliche Wege zum Definieren unserer Routen)Springfox Swagger Konfiguration und Dokumentation werden nicht erfasst

Das Problem, das uns gegenübersteht, ist, dass wir trotz unserer Konfiguration/Einrichtung nur eine leere Benutzeroberfläche ohne Endpunkte und Dokumentation sehen. Es ist im Grunde eine leere Leinwand. Wir haben ein gutes Stück gesucht und trotz mehrerer Konfigurationen von Beans und Definitionen waren wir immer noch auf dasselbe Problem gestoßen.

Zuletzt haben wir versucht, dieses Beispiel aus: Swagger Springfox Configuration Issue

einige Auszüge unserer Setup/Konfiguration und relevante Dateien unten hergestellt werden.

Controller (n) Klassen:

UserDeviceAuthenticationController

@RestController 
public class UserDeviceAuthenticationController { 

private static final Logger LOGGER = Logger 
     .getLogger(UserDeviceAuthenticationController.class); 

/** 
* 
* @param response 
* @param request 
* @param deviceID: a misnomer. This field is different for every client set up on Fitbit 
* @throws IOException 
* @throws ParseException 
*/ 
@RequestMapping(value = "/fitbitEndPoint", method = RequestMethod.POST) 
public void fitbitEndPoint(HttpServletResponse response, 
     //Body logic redacted 

} 

PHDDeviceRestService

@Path("device/v2.0") 
@Component 
public class PHDDeviceRestService extends BaseServiceImpl { 

    @POST 
    @Path("/{deviceId}/url") 
    @Produces({ MediaType.APPLICATION_JSON }) 
    @Consumes({ MediaType.APPLICATION_JSON }) 
    public Response getDeviceURL(GetDeviceURLRequest getDeviceURLRequest, @PathParam("deviceId") Long deviceId) throws PHDWebServiceException { 
     //Logic redacted 
    } 

Konfigurationsdateien:

Unsere relevanten Swagger Springfox Abhängigkeiten in unserer pom.xml

<!-- Swagger dependency --> 
<dependencies> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger2</artifactId> 
     <version>2.6.0</version> 
    </dependency> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger-ui</artifactId> 
     <version>2.6.0</version> 
    </dependency> 
</dependencies> 

Unsere web.xml die Servlets und URL-Muster enthalten:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 

<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/mvc/webmvc-config.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<!-- Map all *.spring requests to the DispatcherServlet for handling --> 
<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/devices/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/healthyweight/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/DevicesGateway/*</url-pattern> 
</servlet-mapping> 
<servlet> 
    <servlet-name>jersey</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>com.uhg.phd.rest;com.uhg.phd.rest.MongoDB</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet> 
    <servlet-name>CXFSevlet</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CXFSevlet</servlet-name> 
    <url-pattern>/services/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>CXFSevlet</servlet-name> 
    <url-pattern>/ws/*</url-pattern> 
</servlet-mapping> 
<!-- <servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> --> 
<servlet-mapping> 
    <servlet-name>CXFSevlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<!-- <servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/swagger-ui.html</url-pattern> 
</servlet-mapping> --> 
</web-app> 

Unsere SwaggerConfig Klasse, wo Docket Bean definiert ist:

@EnableSwagger2 
public class SwaggerConfig { 

@Bean 
public Docket api() { 
    return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
      .apis(RequestHandlerSelectors.any()) 
      .paths(PathSelectors.any()) 
      .build(); 
} 

} 

Unsere WebMvcConfig Klasse mit Viewcontrollers und ResourceHandlers:

@EnableWebMvc 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addRedirectViewController("/documentation/v2/api-docs", "/v2/api-docs?group=restful-api"); 
    registry.addRedirectViewController("/documentation/swagger-resources/configuration/ui","/swagger-resources/configuration/ui"); 
    registry.addRedirectViewController("/documentation/swagger-resources/configuration/security","/swagger-resources/configuration/security"); 
    registry.addRedirectViewController("/documentation/swagger-resources", "/swagger-resources"); 
} 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("documentation/swagger-ui.html") 
    .addResourceLocations("classpath:/META-INF/resources/"); 

    registry.addResourceHandler("documentation/webjars/**") 
    .addResourceLocations("classpath:/META-INF/resources/webjars/"); 
} 

} 

Danke Sie zum Durchlesen all dies. Lassen Sie mich wissen, wenn Sie mehr von unserem Code/Dateien sehen möchten oder wenn ich etwas vermisse. Jede Eingabe ist erwünscht!

Antwort

0

Sie gefunden wahrscheinlich eine Antwort schon, aber wenn jemand vielleicht das gleiche Problem hat, das hilft ihnen:

Was den Trick für mich das Paket, in dem ich von ComponentScan basePackages meine SwaggerConfig zur Liste hinzuzufügen war. Im Grunde habe ich die gleiche SwaggerConfig aber meine Application Datei (ich bin mit Spring-Boot) sieht wie folgt aus:

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = { 
     "my.test.config", 
     "my.test.controllers", 
     "my.test.models"}) 
public class SwaggerTestApplication { 

    public static void main(String[] args) { 
     ConfigurableApplicationContext context = SpringApplication.run(SwaggerTestApplication.class, args); 
    } 
} 

Der wichtige Teil der "my.test.config" Paket im ComponentScan sein - wo die SwaggerConfig definiert ist.

+0

Hallo Tudor. Danke für Ihren Vorschlag. Wir sind im Frühjahr MVC und nicht Spring Boot. Wie auch immer, wir haben eine Datei web.xml definiert, die auf Dateien webmvc-config.xml und applicationContext.xml verweist. Innerhalb dieser Dateien wurde "" festgelegt und definiert. Das Basispaket umfasst alle Klassen und Java-Dateien, einschließlich derjenigen, in denen ich SwaggerConfig bereits definiert habe. Zum Beispiel fällt SwaggerConfig Datei unter com.uhg.phd.Configuration und das sollte bereits inclusive gescannt werden. Ist XML nicht so robust wie direktes Inline-Java? – JWU1000

+0

Das XML ist so robust wie es in Java definiert ist - das ist also nicht das Problem. Wenn Sie es nicht schon getan haben, können Sie sich das Beispiel im offiziellen Repository anschauen: https://github.com/springfox/springfox-demos/tree/master/spring-xml-swagger Und machen sicher, dass Ihre SwaggerConfig gefunden wird (aus dem Beispiel): ... das ist an alles, woran ich gerade denke. – tudor

Verwandte Themen