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 0000000000000000000000000000000000000000..b5142d5b0429c287ef4d997b51ab03a362deb785 --- /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 496dc5c8dbb26f53a596c438d60363c043d04dc4..2e77242b340d1389566eac83b73a4173768f15d7 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 a7ba8fc0ac943b93847929d71c3144d7bb24c790..9202dfb6299ada0ed00ff177a40bf3756d284969 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); - }; - } }