Make fields from com.amazonaws.serverless.proxy.model.AwsProxyRequest optional to set

Abierto
#1,495 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
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
aws, java, spring-boot
Área
api, backend

Línea de trabajo

Comienza con com.amazonaws.serverless.proxy.model.AwsProxyRequest y la validación en AwsProxyHttpServletRequestReader.readRequest. Compara los ejemplos mínimos de preparación de GET y POST del issue con el modelo de request actual y el manejo del contexto. La tarea estará terminada cuando los llamadores puedan construir los requests mostrados sin campos ni objetos ficticios y los requests válidos de API Gateway sigan funcionando.

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

Descripción

When using AWS Serverless Java Container with Spring Boot 3 and Lambda SnapStart with priming with I tested this type of priming implementation WebRequestPriming

Unfortunately I have to set so many fields of the com.amazonaws.serverless.proxy.model.AwsProxyRequest with dummy values and even create dummy objects like AwsProxyRequestContext and ApiGatewayRequestIdentity (see the method getAwsProxyRequest) in order not to get errors like:

at
com.amazonaws.serverless.exceptions.InvalidRequestEventException: The incoming event is not a valid request from Amazon API Gateway or an Application Load Balancer com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader.readRequest(AwsProxyHttpServletRequestReader.java:48)

or

java.lang.NullPointerException: Cannot invoke "com.amazonaws.serverless.proxy.model.ApiGatewayRequestIdentity.getAccessKey()" because the return value of "com.amazonaws.serverless.proxy.model.AwsProxyRequestContext.getIdentity()" is null

Here is the complete code I had to write in order to make it work:

private static AwsProxyRequest getAwsProxyRequest () {
	final AwsProxyRequest awsProxyRequest = new AwsProxyRequest ();
	awsProxyRequest.setHttpMethod("GET");
	awsProxyRequest.setPath("/products/0");
	//awsProxyRequest.setResource("/products/{id}");
	awsProxyRequest.setPathParameters(Map.of("id","0"));
	final AwsProxyRequestContext awsProxyRequestContext = new AwsProxyRequestContext();
	final ApiGatewayRequestIdentity apiGatewayRequestIdentity= new ApiGatewayRequestIdentity();
	apiGatewayRequestIdentity.setApiKey("blabla");
	awsProxyRequestContext.setIdentity(apiGatewayRequestIdentity);
	awsProxyRequest.setRequestContext(awsProxyRequestContext);
	return awsProxyRequest;		
}

For my use case this will be enough to do the priming like this:

  final AwsProxyRequest awsProxyRequest = new AwsProxyRequest ();
  awsProxyRequest.setHttpMethod("GET");
  awsProxyRequest.setPathParameters(Map.of("id","0"));

Others, that priming Post request would only like to set the body like this:

  final AwsProxyRequest awsProxyRequest = new AwsProxyRequest ();
  awsProxyRequest.setHttpMethod("POST");
  awsProxyRequest.setBody("bla");

Many field should be optional to set to easily construct such objects or please provide static factory methods for it to save on the boilerplate code.

Compare it with how easy it is to implement the same type of SnapStart priming with

  1. Spring Cloud Function AWS Adapter

see my implementation of the method getAPIGatewayProxyRequestEventAsJson here AmazonAPIGatewayPrimingResource

as I only do

    final APIGatewayProxyRequestEvent proxyRequestEvent = new APIGatewayProxyRequestEvent ();
	proxyRequestEvent.setHttpMethod("GET");
	proxyRequestEvent.setPathParameters(Map.of("id","0"));
  1. Quarkus 3, see my implementation of the method getAwsProxyRequest here AmazonAPIGatewayPrimingResource

as I only do the same as above:

    final APIGatewayProxyRequestEvent proxyRequestEvent = new APIGatewayProxyRequestEvent ();
	proxyRequestEvent.setHttpMethod("GET");
	proxyRequestEvent.setPathParameters(Map.of("id","0"));
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.