springfox-data-rest配置不起作用

时间:2017-11-20 04:18:09

标签: spring-boot spring-data-rest springfox

我按照link进行配置。

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-data-rest</artifactId>
  <version>2.7.0</version>
</dependency> 

@Configuration
@Import( {springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
public class WebMvcConfig extends WebMvcConfigurerAdapter{
     ......
}

@RepositoryRestResource(collectionResourceRel = "mails", path = "mails")
public interface TMessageMailDao extends   PagingAndSortingRepository<TMessageMail, Long>{


}

但是当我打开http://localhost:8080/swagger-ui.html时,什么都没有。

我知道springfox-data-rest仍在孵化中。这是它不起作用的原因吗?或者有什么不对吗?

2 个答案:

答案 0 :(得分:1)

  • 您缺少@EnableSwagger2注释。
  • 确保创建一个Docket bean,如下例所示。

    @Configuration
    @Import({SpringDataRestConfiguration.class})
    @EnableSwagger2
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
        ...
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                .groupName("example")
                .select()
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo("Example API", "Example API"));
        }
    
        private ApiInfo apiInfo(String title, String description) {
             return new ApiInfoBuilder()
                 .title(title)
                 .description(description)
                 .build();
       }
    }
    
  • 确保添加以下依赖项:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
       <groupId>io.springfox</groupId>
       <artifactId>springfox-swagger-ui</artifactId>
       <version>2.7.0</version>
    </dependency>
    

一旦它正常工作,您的swagger-ui.html将会显示如下:

enter image description here

  

我想扫描两个包。如何包含两个基本包而不是一个?

Just Controllers

如果您只对包含REST控制器而不是任何存储库感兴趣,可以使用自定义方法在Docket的apis方法中指定任意数量的包。

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("book")
                .select()
                .apis(exactPackages("com.basaki.controller", "com.basaki.model"))
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo("Example Springfox API",
                        "Example Springfox API"));
    }

    private static Predicate<RequestHandler> exactPackages(
            final String... pkgs) {
        return input -> {
            String currentPkg = 
                input.declaringClass().getPackage().getName();
            for (String pkg : pkgs) {
                if (pkg.equals(currentPkg)) {
                    return true;
                }
            }
            return false;
        };
    }

控制器和存储库

如果您对包含REST控制器和存储库感兴趣,则必须借助自定义方法在Docket中利用paths方法。自定义方法采用路径正则表达式。

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("book")
                .select()
                .paths(matchPathRegex("/books(/|$).*",
                    "/booxs(/|$).*", "/tokens(/|$).*",
                    "/ping(/|$).*"))
                .build()
                .apiInfo(apiInfo("Example Springfox API",
                        "Example Springfox API"));
    }

    private static Predicate<String> matchPathRegex(final String... pathRegexs) {
        return new Predicate<String>() {
            @Override
            public boolean apply(String input) {
                for (String pathRegex : pathRegexs) {
                    if (input.matches(pathRegex)) {
                        return true;
                    }
                }
                return false;
            }
        };
    }

答案 1 :(得分:0)

感谢Indra Basak的帮助 我的配置只有一个问题。

@Configuration
@EnableSwagger2
@Import({SpringDataRestConfiguration.class})

这三个注释必须一起使用。我在另一个配置文件中配置了@ EnableSwagger2。