rest - "404 Not Found" when viewing swagger api-docs when using swagger-springmvc (now springfox) -


i trying configure swagger in spring project, hitting hitting "http://localhost:8080/api-docs" says "404 not found".

maven dependency

<dependency>               <groupid>com.mangofactory</groupid>              <artifactid>swagger-springmvc</artifactid>                      <version>0.8.2</version>       </dependency> 

swaggerconfig.java file

package com.ucap.swagger;  import com.mangofactory.swagger.configuration.jacksonscalasupport; import com.mangofactory.swagger.configuration.springswaggerconfig; import com.mangofactory.swagger.configuration.springswaggermodelconfig; import com.mangofactory.swagger.configuration.swaggerglobalsettings; import com.mangofactory.swagger.core.defaultswaggerpathprovider; import com.mangofactory.swagger.core.swaggerapiresourcelisting; import com.mangofactory.swagger.core.swaggerpathprovider; import com.mangofactory.swagger.scanners.apilistingreferencescanner; import com.wordnik.swagger.model.*; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.value; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration;  import java.util.arraylist; import java.util.arrays; import java.util.list;  import static com.google.common.collect.lists.newarraylist;  @configuration @componentscan(basepackages = "com.mangofactory.swagger") public class swaggerconfig {      public static final list<string> default_include_patterns = arrays.aslist("/news/.*");     public static final string swagger_group = "mobile-api";      @value("${app.docs}")     private string docslocation;      @autowired     private springswaggerconfig springswaggerconfig;     @autowired     private springswaggermodelconfig springswaggermodelconfig;      /**      * adds jackson scala module mappingjackson2httpmessageconverter registered spring      * swagger core models scala need able convert json      * registers custom serializers needed transform swagger models swagger-ui required json format      */     @bean     public jacksonscalasupport jacksonscalasupport() {         jacksonscalasupport jacksonscalasupport = new jacksonscalasupport();         //set false disable         jacksonscalasupport.setregisterscalamodule(true);         return jacksonscalasupport;     }      /**      * global swagger settings      */     @bean     public swaggerglobalsettings swaggerglobalsettings() {         swaggerglobalsettings swaggerglobalsettings = new swaggerglobalsettings();         swaggerglobalsettings.setglobalresponsemessages(springswaggerconfig.defaultresponsemessages());         swaggerglobalsettings.setignorableparametertypes(springswaggerconfig.defaultignorableparametertypes());         swaggerglobalsettings.setparameterdatatypes(springswaggermodelconfig.defaultparameterdatatypes());         return swaggerglobalsettings;     }      /**      * api info appears on swagger-ui page      */     private apiinfo apiinfo() {         apiinfo apiinfo = new apiinfo(                 "news api",                 "mobile applications , beyond!",                 "https://helloreverb.com/terms/",                 "matt@raibledesigns.com",                 "apache 2.0",                 "http://www.apache.org/licenses/license-2.0.html"         );         return apiinfo;     }      /**      * configure swaggerapiresourcelisting each swagger instance within app. e.g. 1. private  2. external apis      * required spring bean spring call postconstruct method bootstrap swagger scanning.      *      * @return      */     @bean     public swaggerapiresourcelisting swaggerapiresourcelisting() {         //the group name important , should match group set on apilistingreferencescanner         //note swaggercache() defaultswaggercontroller serve swagger json         swaggerapiresourcelisting swaggerapiresourcelisting = new swaggerapiresourcelisting(springswaggerconfig.swaggercache(), swagger_group);          //set required swagger settings         swaggerapiresourcelisting.setswaggerglobalsettings(swaggerglobalsettings());          //use custom path provider or springswaggerconfig.defaultswaggerpathprovider()         swaggerapiresourcelisting.setswaggerpathprovider(apipathprovider());          //supply api info should appear on swagger-ui web page         swaggerapiresourcelisting.setapiinfo(apiinfo());          //global authorization - see swagger documentation         swaggerapiresourcelisting.setauthorizationtypes(authorizationtypes());          //every swaggerapiresourcelisting needs apilistingreferencescanner scan spring request mappings         swaggerapiresourcelisting.setapilistingreferencescanner(apilistingreferencescanner());         return swaggerapiresourcelisting;     }      @bean     /**      * apilistingreferencescanner of work.      * scans appropriate spring requestmappinghandlermappings      * applies correct absolute paths generated swagger resources      */     public apilistingreferencescanner apilistingreferencescanner() {         apilistingreferencescanner apilistingreferencescanner = new apilistingreferencescanner();          //picks of registered spring requestmappinghandlermappings scanning         apilistingreferencescanner.setrequestmappinghandlermapping(springswaggerconfig.swaggerrequestmappinghandlermappings());          //excludes controllers supplied annotations         apilistingreferencescanner.setexcludeannotations(springswaggerconfig.defaultexcludeannotations());          //         apilistingreferencescanner.setresourcegroupingstrategy(springswaggerconfig.defaultresourcegroupingstrategy());          //path provider used generate appropriate uri's         apilistingreferencescanner.setswaggerpathprovider(apipathprovider());          //must match swagger group set on swaggerapiresourcelisting         apilistingreferencescanner.setswaggergroup(swagger_group);          //only include paths match supplied regular expressions         apilistingreferencescanner.setincludepatterns(default_include_patterns);          return apilistingreferencescanner;     }      /**      * example of custom path provider      */     @bean     public apipathprovider apipathprovider() {         apipathprovider apipathprovider = new apipathprovider(docslocation);         apipathprovider.setdefaultswaggerpathprovider(springswaggerconfig.defaultswaggerpathprovider());         return apipathprovider;     }       private list<authorizationtype> authorizationtypes() {         arraylist<authorizationtype> authorizationtypes = new arraylist<>();          list<authorizationscope> authorizationscopelist = newarraylist();         authorizationscopelist.add(new authorizationscope("global", "access all"));          list<granttype> granttypes = newarraylist();          loginendpoint loginendpoint = new loginendpoint(apipathprovider().getappbasepath() + "/user/authenticate");         granttypes.add(new implicitgrant(loginendpoint, "access_token"));          return authorizationtypes;     }      @bean     public swaggerpathprovider relativeswaggerpathprovider() {         return new apirelativeswaggerpathprovider();     }      private class apirelativeswaggerpathprovider extends defaultswaggerpathprovider {         @override         public string getappbasepath() {             return "/";         }          @override         public string getswaggerdocumentationbasepath() {             return "/api-docs";         }     } } 

apipathprovider.java file

package com.ucap.swagger;  import com.mangofactory.swagger.core.swaggerpathprovider; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.util.uricomponentsbuilder;  import javax.servlet.servletcontext;  public class apipathprovider implements swaggerpathprovider {     private swaggerpathprovider defaultswaggerpathprovider;     @autowired     private servletcontext servletcontext;      private string docslocation;      public apipathprovider(string docslocation) {         this.docslocation = docslocation;     }      @override     public string getapiresourceprefix() {         return defaultswaggerpathprovider.getapiresourceprefix();     }      public string getappbasepath() {         return uricomponentsbuilder                 .fromhttpurl(docslocation)                 .path(servletcontext.getcontextpath())                 .build()                 .tostring();     }      @override     public string getswaggerdocumentationbasepath() {         return uricomponentsbuilder                 .fromhttpurl(getappbasepath())                 .pathsegment("api-docs/")                 .build()                 .tostring();     }      @override     public string getrequestmappingendpoint(string requestmappingpattern) {         return defaultswaggerpathprovider.getrequestmappingendpoint(requestmappingpattern);     }      public void setdefaultswaggerpathprovider(swaggerpathprovider defaultswaggerpathprovider) {         this.defaultswaggerpathprovider = defaultswaggerpathprovider;     } } 

also, there property file in resources folder contains:

app.docs=http://localhost:8080

when hitting "http://localhost:8080/api-docs" neither gives result nor error, on google rest response code 404.

please me on this.

the version you're using (0.8.2) old version of springfox. should try , move latest released version, 2.0.

to answer questions specifically.

  1. move recent pre-2.0 version. change version of swagger-spingmvc in pom 1.0.2
  2. the swagger configuration vastly simplified in later releases. change swaggerconfig this.
@configuration //hard tell without seeing configuration, optionally,  //add enablewebmvc annotation in case not working @enablewebmvc  @enableswagger //assuming controllers in package @componentscan(basepackages = "com.ucap.swagger")  public class swaggerconfig {      public static final list<string> default_include_patterns               = arrays.aslist("/news/.*");     //unless want group, recommend ignoring     public static final string swagger_group = "mobile-api";       @autowired     private springswaggerconfig springswaggerconfig;        @bean     public swaggerspringmvcplugin customimplementation(){         return new swaggerspringmvcplugin(this.springswaggerconfig)           .includepatterns(default_include_patterns);     } } 
  1. you don't need path provider more.
  2. you no longer need property file

Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -