in functions/http/parse-content-type/src/main/java/functions/ParseContentType.java [41:86]
public void service(HttpRequest request, HttpResponse response)
throws IOException {
String name = null;
// Default values avoid null issues (with switch/case) and exceptions from get() (optionals)
String contentType = request.getContentType().orElse("");
switch (contentType) {
case "application/json":
// '{"name":"John"}'
JsonObject body = gson.fromJson(request.getReader(), JsonObject.class);
if (body.has("name")) {
name = body.get("name").getAsString();
}
break;
case "application/octet-stream":
// 'John', stored in a Buffer
name = new String(Base64.getDecoder().decode(request.getInputStream().readAllBytes()),
StandardCharsets.UTF_8);
break;
case "text/plain":
// 'John'
name = request.getReader().readLine();
break;
case "application/x-www-form-urlencoded":
// 'name=John' in the body of a POST request (not the URL)
Optional<String> nameParam = request.getFirstQueryParameter("name");
if (nameParam.isPresent()) {
name = nameParam.get();
}
break;
default:
// Invalid or missing "Content-Type" header
response.setStatusCode(HttpURLConnection.HTTP_UNSUPPORTED_TYPE);
return;
}
// Verify that a name was provided
if (name == null) {
response.setStatusCode(HttpURLConnection.HTTP_BAD_REQUEST);
}
// Respond with a name
var writer = new PrintWriter(response.getWriter());
writer.printf("Hello %s!", name);
}