Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Stream Version ~ ausprobiert

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.

Welches ist doch besser?

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

Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Stream Version ~ ausprobiert
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ POJO Edition ~ ausprobiert
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, neunundneunzig in Java auszugeben
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, node-jt400 (SQL-Stream)
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Über Lambda, Stream, LocalDate von Java8
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe das Java-Framework "Quarkus" ausprobiert.
Ich habe versucht, JWT in Java zu verwenden
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe Cassandras Object Mapper für Java ausprobiert
Java9 war enthalten, also habe ich jshell ausprobiert.
Heutzutage Java Lambda Expressions und Stream API
Ich habe das neue Yuan-Problem in Java ausprobiert
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe Googles Aufnahmeprüfung (inoffiziell) [Java] ausprobiert.
Ich habe Javas Lambda-Ausdruck Stream-API ein halbes Jahr nach dem Start von Java überprüft.
Ich kann mich nicht an die Eingabe / Ausgabe von Textdateien in Java erinnern, also habe ich sie zusammengefasst.
Schreiben wir die Eingabe / Ausgabe von Java-Dateien mit NIO
Ich habe versucht, Java einfach auf meinen Mac zu bringen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Java Ich habe versucht, einen einfachen Block zu brechen
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, Java in einem Mac-Terminal auszuführen
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -
Probieren Sie Progate Free Edition [Java I]