簡體   English   中英

Spring Boot Controller端點未啟用?

[英]Spring boot controller endpoints not enabled?

我繼承了一個沒有服務或API層的Spring Boot微服務,它表現為HATEOAS風格。

這不是最佳架構,需要更改為MVC。

當前,所有存儲庫方法都可以使用@RepositoryRestResource批注直接訪問。

計划是對其進行重構,並添加控制器和API層(DTO),但是,在添加控制器后,大張旗鼓地不顯示Rest控制器。還要注意,在調試控制器端點時,實際上並沒有達到。 它被繞開了,這是另一個線索。

@CrossOrigin
@RestController
@RequestMapping("/fixing")
public class FixingController {

  private final FixingRepository fixingRepository;

  @Autowired
  FixingController(final FixingRepository fixingRepository) {
    this.fixingRepository = checkNotNull(fixingRepository, "Fixing Repository cannot be null");
  }

  /**
   * Builds a list of Fixing strings from the database
   * @return list
   */
  @RequestMapping(value = "/", method = RequestMethod.GET)
  public List<String> getAllFixings() {

    final List<String> fixingList = new ArrayList<>();
    for (Fixing fixing : fixingRepository.findAll()) {
      String name = fixing.getName();
      fixingList.add(name);
    }
    return fixingList;
  }

}

這是春天的招搖配置

@Configuration
public class SwaggerConfig {

@Bean
public Docket api() {

return new Docket(DocumentationType.SWAGGER_2)
  .select()
  .apis(RequestHandlerSelectors.any())
  .paths(PathSelectors.regex("/api.*"))
  .build();
 } 
}

存儲庫(注意沒有@RepositoryRestResource注釋)

public interface FixingRepository extends JpaRepository<Fixing, Long> {

  @Override
  Fixing findOne(Long id);

  @Override
  List<Fixing> findAll();

}

當我重建並啟動服務時,未顯示控制器。 它僅顯示所有實體及其存儲庫方法。

在此處輸入圖片說明

POM依賴性

 <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--  included explicitly to avoid javadoc generation error
              due to a conflict with a class used by @Transactional annotation -->
        <dependency>
            <groupId>javax.interceptor</groupId>
            <artifactId>javax.interceptor-api</artifactId>
            <version>1.2</version>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.12</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>


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

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

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>1.5.13.RELEASE</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.json/json -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180130</version>
        </dependency>

        <dependency>
            <groupId>com.vladmihalcea</groupId>
            <artifactId>hibernate-types-52</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.5</version>
        </dependency>

        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>3.6.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter-storage</artifactId>
            <version>1.0.0.RELEASE</version>
        </dependency>

    </dependencies>

任何想法是什么原因造成的? 我在配置中看不到其他東西,這阻止了它的工作

問題出在您的SwaggerConfig上。 您只能通過以下方式選擇API的一個子集(來自JPA存儲庫或來自RestController):

.paths(PathSelectors.regex("/api.*"))

我復制了您的方案,我只是注釋掉了路徑選擇,可以看到這兩種API。 請注意,您還可以使用自定義謂詞來選擇路徑:

@Configuration
@Import({SpringDataRestConfiguration.class})
public class SwaggerConfig {

    @Autowired
    @SuppressWarnings({"UnusedDeclaration"})
    private ServletContext servletContext;

    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .pathProvider(relativePath())
                .select()
                .apis(RequestHandlerSelectors.any())
//                .paths(paths2())
                .build();
    }
    // Select only a few
    private Predicate<String> paths2() {
        return and(
                (regex("/fixing.*")),
                (regex("/api.*")));
    }
    // Exclude these 
    private Predicate<String> paths() {
        return and(
                not(regex("/error.*")),
                not(regex("/metrics.*")),
                not(regex("/jolokia.*")),
                not(regex("/health.*")),
                not(regex("/env.*")),
                not(regex("/metrics.*")),
                not(regex("/info.*")),
                not(regex("/mappings.*")),
                not(regex("/trace.*")),
                not(regex("/dump.*")),
                not(regex("/heapdump.*")),
                not(regex("/configprops.*")),
                not(regex("/beans.*")),
                not(regex("/autoconfig.*")),
                not(regex("/logfile.*")),
                not(regex("/shutdown.*")),
                not(regex("/actuator.*")));
    }
}

樣品架控制器:

@CrossOrigin
@RestController
@RequestMapping("/fixing")
public class FixingController {

    /**
     * Builds a list of Fixing strings from the database
     * @return list
     */
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List<String> getAllFixingsViaRestController() {

        final List<String> fixingList = new ArrayList<>();
        fixingList.add("foo");
        fixingList.add("bar");

        return fixingList;
    }

}

現在我的Swagger UI看起來像這樣; 您可以看到JPA資源庫提供的REST API和RestController提供的API(/修復路徑):

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM