com.amazonaws.apigateway.request.context missing in backend @RestController

Abierto
#1,551 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
aws, java, spring-boot
Área
api, backend, cloud

Línea de trabajo

Comienza con el punto de entrada LambdaHandler y GeographicAddressController mostrados en el issue y, a continuación, sigue cómo se expone el API Gateway request context a los atributos del controlador de Spring. Reproduce la solicitud con las versiones de Spring Boot y del contenedor indicadas; se considera terminado cuando @RequestAttribute recibe AwsProxyRequestContext, incluidos los detalles del authorizer, en lugar de null.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Issue: com.amazonaws.apigateway.request.context missing in backend @RestController

To help us debug your issue fill in the basic information below using the options provided

Serverless Java Container version: 2.1.4

Implementations: Spring Boot 3

Framework version: SpringBoot 3.5.3

Frontend service: REST API / API Gateway Proxy Request

Deployment method: SAM

Description

When using Spring Boot 3.5.3 with aws-serverless-java-container-springboot3:2.1.4,
the AwsProxyRequestContext is not being injected into a controller method when annotated with:

@RequestAttribute("com.amazonaws.apigateway.request.context")

This attribute is expected to contain the API Gateway request context, but instead it is always null.

Lambda Handler

import com.amazonaws.serverless.exceptions.ContainerInitializationException;
import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler;
import com.amazonaws.serverless.proxy.model.AwsProxyRequest;
import com.amazonaws.serverless.proxy.model.AwsProxyResponse;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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

    static {
        try {
            handler = new SpringBootProxyHandlerBuilder<AwsProxyRequest>()
                    .defaultProxy()
                    .initializationWrapper(new InitializationWrapper())
                    .springBootApplication(Application.class)
                    .buildAndInitialize();
        } catch (ContainerInitializationException e) {
            throw new LambdaException("Could not initialize Lambda. ", e);
        }
    }

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

Controller

import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
public class GeographicAddressController {

    private static final String API_GATEWAY_CONTEXT_PROPERTY = "com.amazonaws.apigateway.request.context";

    @GetMapping(path = "/geographicAddress", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Object> get(
            final @RequestHeader HttpHeaders reqHeaders,
            final @RequestParam Map<String, String> params,
            final @RequestAttribute(value = API_GATEWAY_CONTEXT_PROPERTY, required = false) AwsProxyRequestContext requestContext
    ) {
        // requestContext is always null, I would like to get AwsProxyRequestContext , and authorizer details
        return ResponseEntity.ok().build();
    }
}

Expected Behavior

The requestContext parameter should be populated with the AwsProxyRequestContext extracted from the incoming API Gateway event.

Actual Behavior

requestContext is always null inside the controller method.

Steps to Reproduce

  • Deploy a Spring Boot 3.5.3 application with aws-serverless-java-container-springboot3:2.1.4.
  • Use the Lambda handler shown above.
  • Add a controller method with @RequestAttribute("com.amazonaws.apigateway.request.context").
  • Invoke the API Gateway endpoint.
  • Observe that requestContext is always null.
Lenguaje dominante
Java
Estrellas
1.6k
Forks
575
Merge medio
1 d 15 h
PR fusionados (30 d)
12

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de aws/serverless-java-container

Todos los issues de aws/serverless-java-container

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.