首页 > 解决方案 > 为什么 Spring Boot 需要这么长时间才能找到方法处理程序

问题描述

我有一个使用 Spring Boot 和 Swagger 配置的服务。

我的招摇路径配置如下所示:

paths:
  /hello/test:
    post:
      summary: Hello World Test
      description: >-
        Hello World
      operationId: helloTest
      tags:
        - Hello
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HelloRequest'
        description: Hello Request
        required: true
      responses:
        '200':
          description: >
            OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HelloResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /confirmations:
    post:
      summary: Hello World Confirmation
      description: >-
        Hello World Confirmation
      operationId: postConfirmations
      tags:
        - Confirmation
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmationRequest'
        description: Hello Confirmation Request
        required: true
      responses:
        '204':
          description: >
            No Content
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

我的日志多次显示此消息

Did not find handler method for [/hello/test]

即使在显示此消息之后:

Returning handler method [public default org.springframework.http.ResponseEntity<com.sample.hello.generated.emvco.model.HelloResponse> com.sample.hello.generated.emvco.api.HelloApi.postTransactionCredentials(com.sample.hello.generated.emvco.model.HelloRequest)]

这需要长达 5 毫秒的初始分辨率,这会影响服务的性能。是什么导致 spring 反复寻找一条明确定义的路径?

标签: spring-bootswagger

解决方案


我认为这样的问题主要出现在项目结构不正确的情况下。我假设您的控制器类在扫描期间未找到或花费时间,因为它位于默认情况下不会扫描的包中。我猜您的应用程序的方式不正确或默认结构不正确。请将您的控制器更改为 com.app.controller 并检查性能。


推荐阅读