我已经构建了一个带有多个 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
,但问题仍然存在。
您在哪里导入 HttpServletRequest? 我有一个类似的问题。我从 jakarta.servlet 导入这个类。 我删除了这个依赖项并添加了 spring-boot-starter-web。
最初,我只使用 spring-boot-starter-webflux。
希望这对您有帮助。