tutorial smart remix español curso aprender amazon-web-services aws-lambda

amazon-web-services - smart - solidity español



Error al ejecutar "Hello World" para AWS Lambda en Java (4)

Intenté con el siguiente valor en la prueba:

"TestInput"

en lugar de :

{ Input : "TestInput"}

Y parece que ha funcionado bien.

He escrito después de Hello World Lambda que estoy ejecutando al cargar en AWS a través del kit de herramientas de AWS para Eclipse.

public class HelloWorldLambdaHandler implements RequestHandler<String, String> { public String handleRequest(String input, Context context) { System.out.println("Hello World! executed with input: " + input); return input; } }

Estoy recibiendo el siguiente error al ejecutar el código anterior. ¿Alguna idea de lo que tal vez estoy haciendo mal aquí? El proyecto BTW Maven que tiene este controlador, no tiene ninguna otra clase y la única dependencia es aws-lambda-java-core versión 1.1.0.

Skip uploading function code since no local change is found... Invoking function... ==================== FUNCTION OUTPUT ==================== {"errorMessage":"An error occurred during JSON parsing","errorType":"java.lang.RuntimeException","stackTrace":[],"cause":{"errorMessage":"com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token/n at [Source: lambdainternal.util.NativeMemoryAsInputStream@2f7c7260; line: 1, column: 1]","errorType":"java.io.UncheckedIOException","stackTrace":[],"cause":{"errorMessage":"Can not deserialize instance of java.lang.String out of START_OBJECT token/n at [Source: lambdainternal.util.NativeMemoryAsInputStream@2f7c7260; line: 1, column: 1]","errorType":"com.fasterxml.jackson.databind.JsonMappingException","stackTrace":["com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)","com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:835)","com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)","com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)","com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)","com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)"]}}}


La solución de trabajo completa es

public class HelloWorldLambdaHandler implements RequestHandler<String, String> { public String handleRequest(String input, Context context) { System.out.println("Hello World! executed with input: " + input); return input; } }

luego la entrada debe estar entre comillas dobles como una Cadena - "Entrada de prueba"


Lea el error de la traza de la pila. Dice "No se puede deserializar la instancia de java.lang.String fuera del token START_OBJECT". El token "START_OBJECT" es ''{''.

El problema fue simplemente que necesita pasar una cadena real como entrada, por ejemplo, "Una cadena". Esta es tu entrada de json. No {}. {} no es una cadena. No necesita llaves, solo una cadena (entre comillas). Por otro lado, {} es un objeto de persona válido, por lo que funcionó una vez que lo modificaste para manejar una persona como entrada.


Por alguna razón, Amazon no puede deserializar a json en una cadena. Usted pensaría que String sería tan general como el parámetro de entrada que puede obtener, pero con razón o sin ella no es compatible.

Para manejar JSON, puede usar un Mapa o un POJO personalizado.

public class HelloWorldLambdaHandler { public String handleRequest(Map<String,Object> input, Context context) { System.out.println(input); return "Hello"; } }