From 1be3c98188c5ae6a9d4e3c3b22404ee00b9cbfc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Sch=C3=A4rtl?= <andreas@schaertl.me> Date: Thu, 21 May 2020 12:41:44 +0200 Subject: [PATCH] uloapi: fix error handling --- .../java/info/mathhub/uloapi/rest/Errors.java | 43 +++++++++++++++++++ .../java/info/mathhub/uloapi/rest/Main.java | 6 ++- .../java/info/mathhub/uloapi/rest/Routes.java | 17 +------- 3 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java new file mode 100644 index 0000000..b5142d5 --- /dev/null +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Errors.java @@ -0,0 +1,43 @@ +package info.mathhub.uloapi.rest; + +import com.google.gson.Gson; +import org.eclipse.jetty.http.HttpStatus; +import spark.Request; +import spark.Response; +import spark.ResponseTransformer; +import spark.Route; + +public class Errors { + private Errors() {}; + + private final static Gson gson = new Gson(); + + private static class JsonError { + final int status; + final String message; + + JsonError(int status) { + this.status = status; + this.message = HttpStatus.getMessage(status); + } + } + + public static final Route notFound = (Request request, Response response) -> { + return createError(HttpStatus.NOT_FOUND_404).handle(request, response); + }; + + public static final Route notAcceptable = (Request request, Response response) -> { + return createError(HttpStatus.NOT_ACCEPTABLE_406).handle(request, response); + }; + + public static final Route notImplemented = (Request request, Response response) -> { + return createError(HttpStatus.NOT_IMPLEMENTED_501).handle(request, response); + }; + + private static Route createError(int status) { + return (Request request, Response response) -> { + final JsonError obj = new JsonError(status); + return Errors.gson.toJson(obj); + }; + } +} diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java index 496dc5c..2e77242 100644 --- a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Main.java @@ -9,11 +9,15 @@ public class Main { private Main() {}; public static void main(String[] args) { + // routes get("/", Routes.index); get("/statistics", Routes.statistics, new JsonTransformer()); get("/name/:name", Routes.name, new JsonTransformer()); - notFound(Routes.notFound); + // error handling + notFound(Errors.notFound); + + // run on all routes and errors after(Filters.setJsonContentType); } } diff --git a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java index a7ba8fc..9202dfb 100644 --- a/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java +++ b/experimental/uloapi/src/main/java/info/mathhub/uloapi/rest/Routes.java @@ -14,7 +14,7 @@ public class Routes { private Routes() {}; public static final Route index = (Request request, Response response) -> { - return "{}"; + return Errors.notImplemented.handle(request, response); }; public static final Route statistics = (Request request, Response response) -> { @@ -30,19 +30,4 @@ public class Routes { return json; }; - - public static final Route notFound = (Request request, Response response) -> { - return createError(HttpStatus.NOT_FOUND_404); - }; - - public static final Route notAcceptable = (Request request, Response response) -> { - return createError(HttpStatus.NOT_ACCEPTABLE_406); - }; - - private static Route createError(int status) { - return (Request request, Response response) -> { - response.status(status); - return String.format("Error %d", status); - }; - } } -- GitLab