gpt4 book ai didi

Spring MVC 选择了错误的 Controller 方法

转载 作者:行者123 更新时间:2023-12-03 12:17:53 25 4
gpt4 key购买 nike

在我的应用程序中,我遇到了 spring mvc 始终选择错误的 Controller 方法来执行的情况。下面 spring 的调试日志显示了这个问题,它找到了两个匹配的一个用于我的通用处理映射到 /api/** 的所有未处理映射 Controller 。一个用于我正在寻找的实际东西 api/companies/2/records/cabinets/FileTypes/50/1 spring mvc 然后选择 /api/**处理程序超过它找到的更具体的处理程序。

我对spring的理解是,如果一个请求映射有两个匹配,那么spring会选择url更长的handle方法。为什么 spring mvc 选择较短的映射?

给定以下映射:

  • /api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId}映射到方法 1
  • /api/**映射到方法 2

  • 和路径 api/companies/2/records/cabinets/FileTypes/50/1 spring mvc 应该选择什么作为上述两个 url 的处理程序方法。

    这是调试日志中的相关行。
    17:58:49,858 DEBUG [DispatcherServlet] DispatcherServlet with name 'main' processing PUT request for [/web/api/companies/2/records/cabinets/FileTypes/50/1]
    17:58:49,858 TRACE [DispatcherServlet] Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@2b25f2be] in DispatcherServlet with name 'main'
    7:58:49,858 DEBUG [RequestMappingHandlerMapping] Looking up handler method for path /api/companies/2/records/cabinets/FileTypes/50/1
    17:58:49,859 TRACE [RequestMappingHandlerMapping] Found 2 matching mapping(s) for [/api/companies/2/records/cabinets/FileTypes/50/1] : [{[/api/**],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}, {[/api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId}],methods=[PUT],params=[],headers=[],consumes=[],produces=[],custom=[]}]

    最佳答案

    这确实是一个错误(参见 herehere )。
    我相信映射考虑了第一个表达式中括号的数量:

    /api/companies/{id}/records/cabinets/FileTypes/{fileTypeId}/{versionId}
    ^-- ^-- ^--
    由于第一个中有三个括号(模式),第二个中只有一个模式( ** ),因此第一个被认为更通用。
    解决方法:
    */*以相同的方式计算,尝试使用第二个表达式,而不是 /api/** , 喜欢:
    /api/**/**/**/**
    这有四种模式,因此使其比另一种“更通用”。但实际上,它等效于 /api/** .这将使其最后评估。
    由于存在这种有点“简单”的解决方法,我相信该错误需要很长时间才能得到纠正,如果可以的话。

    关于Spring MVC 选择了错误的 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16659120/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com