错误消息:找不到接口 jakarta.servlet.http.HttpServletRequest 的主要或单个唯一构造函数

问题描述 投票:0回答:1

我已经构建了一个带有多个 REST API 的 Spring Boot 应用程序。我正在

SpringBootLambdaContainerHandler
的帮助下在 aws lambda 上部署此应用程序。

当我到达所需的终点时,得到

Error
 message: No primary or single unique constructor found for interface jakarta.servlet.http.HttpServletRequest

以下是处理程序:

LambdaHandler.java

package com.testapp.api;

import com.amazonaws.serverless.exceptions.ContainerInitializationException;
import com.amazonaws.serverless.proxy.model.AwsProxyRequest;
import com.amazonaws.serverless.proxy.model.AwsProxyResponse;
import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class LambdaHandler implements RequestHandler<AwsProxyRequest, AwsProxyResponse> {
    private static SpringBootLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;

    static {
        try {
            handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); }
        catch (ContainerInitializationException ex){
            throw new RuntimeException("Unable to load spring boot application",ex); }
    }

    @Override
    public AwsProxyResponse handleRequest(AwsProxyRequest input, Context context) {
        return handler.proxy(input, context);
    }
}

用户控制器.java

package com.testapp.api.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.testapp.api.dto.formatter.GetCurrentUserFormatterDto;
import com.testapp.api.services.users.GetCurrentUserService;

import jakarta.servlet.http.HttpServletRequest;

@RestController
@RequestMapping("/api")
public class UserController {
  
  @GetMapping("/current")
  public ResponseEntity<String> GetCurrentUser(HttpServletRequest request) {

    return ResponseEntity.ok().body("Test");
  }
}

到达终点时:
我收到以下错误:

错误消息:找不到接口 jakarta.servlet.http.HttpServletRequest

的主要或单个唯一构造函数

搜索了一段时间后,我发现可能是因为 lambda 使用

AwsProxyRequest
AwsProxyResponse
处理请求和响应的方式。这些对象不能直接转换为
HttpServletRequest
HttpServletResponse
。我想要一种在控制器中使用
HttpServletRequest
处理这些请求的方法。我已尝试使用版本 = 6.0.0 的
jakarta.servlet-api
,但问题仍然存在。

java amazon-web-services spring-boot aws-lambda
1个回答
0
投票

您在哪里导入 HttpServletRequest? 我有一个类似的问题。我从 jakarta.servlet 导入这个类。 我删除了这个依赖项并添加了 spring-boot-starter-web。

最初,我只使用 spring-boot-starter-webflux。

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.