Incluyendo Access-control-header en la función AWS lambda en java

He estado tratando de implementar una función lambda y luego hacerla accesible a través de API-gateway. Mi función java está en JAVA y esta es la documentación que seguí para crear una función lambda AWS simple en JAVA:

https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-pojo.html

Así es como se ve mi manejador de funciones:

package lambda;

    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import lambda.axon.Path;

    public class shortestPath implements RequestHandler<RequestClass, ResponseClass>{

        public ResponseClass handleRequest(RequestClass request, Context context){
            String inputString = request.inputString;
            int steps = Path.stepsTo(inputString);
            return new ResponseClass(steps);

        }
    }

Esta es esta clase de solicitud:

package lambda;

public class RequestClass {
    String inputString;

    public String getInputString() {
        return inputString;
    }

    public void setInputString(String inputString) {
        this.inputString = inputString;
    }


    public RequestClass(String inputString) {
        this.inputString = inputString;
    }

    public RequestClass() {
    }
}

Y esta es la clase de respuesta:

package lambda;

public class ResponseClass {
    int steps;

    public ResponseClass(int steps) {
        this.steps = steps;
    }

    public ResponseClass() {
    }
    public int getSteps() {
        return steps;
    }

    public void setSteps(int steps) {
        this.steps = steps;
    }


}

Implemento esto en aws y configuro la puerta de enlace API de AWS para activarlo, todo funciona bien cuando llego al punto final dado por la puerta de enlace API cuando uso cartero ( https://www.getpostman.com/ )

Pero intentar lo mismo a través de un navegador me da un error CORS:

Access to XMLHttpRequest at 'https://<hash>execute-api.us-east-1.amazonaws.com/dev' from origin 'http://localhost:4200' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.

Intenté habilitar CORS en la consola de API Gateway y luego volver a implementarlo: ingrese la descripción de la imagen aquí

Esta publicación de Stackoverflow (¿ Configurar encabezados de respuesta CORS en AWS Lambda?) Dice que si estoy usando un proxy lambda, debería tener los encabezados en la respuesta del controlador en sí, no estoy seguro de qué es un proxy, pero cómo puedo hacer eso con mi actual implementación de la función Lambda, es decir, incluir encabezados personalizados en mi respuesta

Respuesta 1

Para habilitar corspara un punto final de puerta de enlace api lo que se conecta a una función lambda, debe habilitar cors para el punto final api (lo ha hecho) Y configurar su soporte de función lambda cors.

Sigue mi ejemplo:

// new respose class, replace for your class - ResponseClass
public class Response {

    private int statusCode; // http status code

    private Map<String, String> headers; // headers

    private String body; // body - what you want to return to client

    public Response(int statusCode, Map<String, String> headers, String body) {
        this.statusCode = statusCode;
        this.headers = headers;
        this.body = body;
    }

    public int getStatusCode() {
        return statusCode;
    }

    public Map<String, String> getHeaders() {
        return headers;
    }

    public String getBody() {
        return body;
    }

    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }

    public void setHeaders(Map<String, String> headers) {
        this.headers = headers;
    }

    public void setBody(String body) {
        this.body = body;
    }

}

/// -------------

package lambda;

    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import lambda.axon.Path;

    public class shortestPath implements RequestHandler<RequestClass, Response>{

        public Response handleRequest(RequestClass request, Context context){
            String inputString = request.inputString;
            int steps = Path.stepsTo(inputString);

            Map<String, String> headers = new HashMap<>();
            headers.put(Access-Control-Allow-Origin, "*"); // cors header, you can add another header fields

            return new Response(200, headers, "" + steps);
            // return new Response(200, headers, "{result: " + steps + "}");
            // simple json response. ex: {result: '3433"}
        }
    }

Mi manera solo tiene efecto cuando la puerta de enlace api usa la LAMBDA-PROXYconfiguración de eventos (predeterminado)

ingrese la descripción de la imagen aquí

Respuesta: 2

Aquí está mi código f = os.popen ("java -version") para i en f.readlines (): print "result", i, Básicamente quiero que la salida de java -version se almacene en f. Lo que pasa es, después ...

Tengo que averiguar la edad desde la fecha de nacimiento colocada en una mesa en una clase de probadores. Esto significa que tengo que obtener la fecha del día actual de ahora a la fecha de una determinada fecha elegida. Por otra parte, yo ...

Tengo algunos problemas para crear un proyecto de Kotlin que utiliza funciones de Java 9. Sé que Kotlin solo permite la generación de código de bytes Java 8, pero de acuerdo con kotlinlang.org, debería admitir esta funcionalidad ...

Lo que pretendo hacer como resultado final es que el usuario pueda escribir algo así como un cuadro de texto y una variedad de opciones para que aparezcan a medida que el usuario escribe letras. Como ejemplo, el usuario podría comenzar a escribir ...