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!
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
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