2年ほど前に会社ブログでこんな記事を書きました。
JShellからSendGridでメール送信する | SendGridブログ
このときはSendGridのJavaライブラリを利用していたのですが、「あれ?そういえばJava 11で標準のHttp Clientが入ったって聞いた気がする」と思って試してみました。参考にした情報はこちらです。
OpenJDK 12.0.1のJShellで試しました。
jshell> import java.net.http.*
jshell> import java.net.http.HttpRequest.*
jshell> import java.net.http.HttpResponse.*
jshell> var client = HttpClient.newBuilder().build()
jshell> var req = HttpRequest.newBuilder().uri(URI.create("https://api.sendgrid.com/v3/mail/send")).header("Content-Type","application/json").header("Authorization", "Bearer SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxx").POST(BodyPublishers.ofString("{\"personalizations\":[{\"to\":[{\"email\":\"to@example.com\"}]}],\"from\":{\"email\":\"from@example.com\"},\"subject\":\"hello\",\"content\":[{\"type\":\"text/plain\",\"value\":\"content\"}]}")).build()
jshell> client.send(req, BodyHandlers.ofString())
※APIキーとメアドはマスクしています。
JSONの部分はBodyPublishers.ofFileなどでJSONファイルから読み込むのが楽そうですが、とりあえず文字列で指定しました。Raw Stringの記法が入ったらもうちょっとシンプルになりそう。JDK 13待ちかな?
今までJavaでHTTPリクエストを投げるときはApache HttpClientやUnirest for Javaを使ってきたので、JShellだとライブラリ読み込みなどが手間だったのですが、標準を使えばシンプルに実行できます。
SendGridのJavaライブラリはApacheのHttpClientに依存しているのだよなぁ。標準で書いてみようかな…。