Für die Eingabe- / Ausgabetypen von Java Lambda können verschiedene Muster verwendet werden.
Im offiziellen Dokument ist es in [hier] geschrieben (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-handler.html#java-handler-types).
In POJO Edition wurde der Umgang mit JSON mithilfe von POJO-Klassen vorgestellt.
Schließlich die Stream Edition mit InputStream / OutputStream.
Es ist ein Code, der gegenüber der vorherigen POJO-Edition geändert wurde und mit Jackson selbst analysiert und generiert wird.
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
public class StreamFunction implements RequestStreamHandler {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
Product product = OBJECT_MAPPER.readValue(inputStream, Product.class);
String name = product.getName();
System.out.println(name); // orange juice
Integer price = product.getPrice();
System.out.println(price); // 1000
Long releaseDate = product.getReleaseDate();
System.out.println(releaseDate); // 1601606387939
Double rate = product.getRate();
System.out.println(rate); // 4.5
List<String> rawMaterial = product.getRawMaterial();
System.out.println(rawMaterial); // [orange, fragrance]
Product.Size size = product.getSize();
Integer height = size.getHeight();
System.out.println(height); // 10
Integer width = size.getWidth();
System.out.println(width); // 20
Integer depth = size.getDepth();
System.out.println(depth); // 30
Product response = new Product();
response.setName("coffee");
response.setPrice(Integer.valueOf(500));
response.setReleaseDate(System.currentTimeMillis());
response.setRate(Double.valueOf(4.2));
response.setRawMaterial(Arrays.asList("coffee", "sugar"));
Product.Size responseSize = new Product.Size();
responseSize.setHeight(Integer.valueOf(100));
responseSize.setWidth(Integer.valueOf(200));
responseSize.setDepth(Integer.valueOf(300));
response.setSize(responseSize);
OBJECT_MAPPER.writeValue(outputStream, response);
}
}
Bei der Ausführung entspricht das Ergebnis der POJO-Edition.
{
"name": "coffee",
"price": 500,
"releaseDate": 1601627790764,
"rate": 4.2,
"rawMaterial": [
"coffee",
"sugar"
],
"size": {
"height": 100,
"width": 200,
"depth": 300
}
}
Ich denke nicht, dass es viel verwendet wird, aber wenn es um großes JSON geht oder wenn Sie die Parser / Generator-Bibliothek von JSON verwenden möchten.
Für Produktcodes wird empfohlen, aus Gründen der Wartbarkeit die POJO-Methode zu verwenden. Wenn Sie es nur schnell verschieben und ausprobieren möchten, ist die Map-Methode einfach.
Recommended Posts