AWS Lambda関数 をJavaで構築する場合、イベントの認識はハンドラメソッドのガイドとして
次がある。
docs.aws.amazon.com
いきなり Map<String, String> で受け取るハンドラメソッドの方法が書いてあります。
JSONなら、JSONとして受け取ったら直ぐに parse して処理したいものです。
受け取るJSON を任意のクラスで定義して変換させるには、InputStream で RequestHandler を実装します。
例)
public class SampleHandler implements RequestHandler<InputStream, String>{ @Override public String handleRequest(InputStream inst, Context context){ ObjectMapper mapper = new ObjectMapper(); try{ SampleDto dto = mapper.readValue(inst, SampleDto.class); }catch(IOException e){ // TODO } return ""; } }
AWS SDK が、Jackson を依存関係に持っているのでこれを使います。
もしも、受け取るJSON に、日付を表現する値がありこれを java.time.LocalDate に変換したいのであれば、
Maven pom.xml に以下を追加して
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.1</version> </dependency>
JavaTimeModule を使って、日付 JSON のデシリアライズ定義を加えておくと良いでしょう。
public class SampleHandler implements RequestHandler<InputStream, String>{ @Override public String handleRequest(InputStream inst, Context context){ // 日付 JSON のデシリアライズ定義 JavaTimeModule jtm = new JavaTimeModule(); jtm.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); ObjectMapper mapper = new ObjectMapper().registerModule(jtm); try{ SampleDto dto = mapper.readValue(inst, SampleDto.class); }catch(IOException e){ // TODO } return "{}"; } }