You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda集成API Gateway报错:无匹配GET请求的路由方法

问题分析

你遇到的错误核心原因是API Gateway的资源路径与Spring Controller的请求映射不匹配:

  • API Gateway配置的资源路径是/mmtFunction,所以实际请求URL是https://7ocfwgjy5b.execute-api.us-east-2.amazonaws.com/default/mmtFunction/searchAll
  • Lambda收到的请求路径是/mmtFunction/searchAll,但你的Spring Controller只映射了/searchAll,因此找不到对应方法。

另外你尝试的.defaultHttpApiV2Proxy()不适用当前场景,因为你创建的是REST API,而非HTTP API v2,所以该配置无效。

解决方案

以下三种方案任选其一即可解决问题:

方案1:调整API Gateway配置,移除资源前缀

  1. 登录AWS API Gateway控制台,进入你的mmtFunction-API
  2. 删除现有的/mmtFunction资源
  3. 选择根资源(/),点击Create Method,选择ANY并保存
  4. 在集成设置中,选择你的Lambda函数mmtDemoFunction,保存并确认添加权限
  5. 重新部署API到default阶段
  6. 测试请求URL改为:https://7ocfwgjy5b.execute-api.us-east-2.amazonaws.com/default/searchAll

方案2:修改Lambda Handler,添加路径前缀映射

修改AWSLambdaHandler的构建代码,指定API Gateway的资源前缀,让Spring自动剥离前缀匹配Controller:

public class AWSLambdaHandler implements RequestStreamHandler {
    private SpringBootLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;

    public AWSLambdaHandler() throws ContainerInitializationException {
        handler = (SpringBootLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse>) new SpringBootProxyHandlerBuilder()
                .springBootApplication(AWSTestApplication.class)
                .proxy("/mmtFunction/**") // 匹配API Gateway的资源路径前缀
                .asyncInit()
                .buildAndInitialize();
    }

    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)
            throws IOException {
        handler.proxyStream(inputStream, outputStream, context);
    }
}

重新打包上传Lambda后,原请求URL即可正常访问。

方案3:修改Spring Controller的映射路径

直接在Controller的请求映射中添加/mmtFunction前缀,匹配API Gateway的路径:

@RestController
public class AWSTestController {

        @Autowired
        private MMTServiceDAO mmtServiceDAO;

        @CrossOrigin(origins = "*")
        @GetMapping("/mmtFunction/searchAll") // 添加前缀
        public List<MMTData> searchAll() {
            List<MMTData> dataList = mmtServiceDAO.findAll();
            return dataList;
         }

        @CrossOrigin(origins = "*")
        @GetMapping("/mmtFunction/searchDataByMember/{memberno}") // 添加前缀
        public List<MMTData> searchDataByMember(@PathVariable Integer memberno) {
           List<MMTData> dataList = mmtServiceDAO.findDataByMemberNo(memberno);
            return dataList;
        }
}

重新打包上传Lambda后,原请求URL即可正常访问。

内容的提问来源于stack exchange,提问作者Stella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:13:19