[JAVA] Wenn Sie "Spring Boot" satt haben, probieren Sie doch "jooby".

In den Projekten, an denen ich kürzlich beteiligt war, habe ich das Gefühl, dass die Einführung von "Spring Boot" (oder "Spring Web") zum De-facto-Standard geworden ist. Ich bin sehr dankbar für die vielen Funktionen, die "Spring Boot" bietet, aber ich bin auch unzufrieden damit.

Zum Beispiel:

Ich habe jooby zufällig getroffen und es ausprobiert, und ich war beeindruckt davon, deshalb möchte ich es vorstellen.


Was ist Jooby?

Es ist ein Framework, das sich auf die Zuweisung von Pfaden zu "Funktionen, die in Antworten konvertiert werden" konzentriert.

Auf der offiziellen Website heißt es: "Es ist ein skalierbares, schnelles, modulorientiertes Mikro-Framework, das mit Java erstellt wurde." Als mir von einem Mikro-Framework erzählt wurde, dachte ich, es sei "wie ein Modewort und rauchig". Als ich versuchte, es zu verwenden, dachte ich, es sei ein Framework, das "anfängt, kompakt und einfach zu erweitern".

Als ich die App tatsächlich ausführte, startete sie schnell und ich spürte den "Mikroframework-Stil". (Der netty -basierte Server wird gestartet.)

Offizielle Site-Beispielquelle

Java-Beispiel

import org.jooby.Jooby;
public class App extends Jooby {
  { get("/", () -> "Hey Jooby!"); }
  public static void main(final String[] args) {
    run(App::new, args);
  }
}

Dies allein startet den Web-App-Server. Es ist auch schön, dass ** Kotlin standardmäßig auch ** unterstützt wird.

Kotlin Probe

import org.jooby.*
class App : Kooby ({
    get("/") { "Hey Jooby!" }
})
fun main(args:Array<String>) {  run(::App, *args) }

In diesem Blog werde ich es in der Quelle von Kotlin unten vorstellen.


Routing-Implementierung

Das get (" / ") {" Hey Jooby! "} Im obigen "Kotlin-Beispiel" ist die Routing-Implementierung. Wenn Sie auf den Root-Pfad zugreifen, wird die Zeichenfolge "Hey Jooby!" Zurückgegeben. (Intuitiv und sehr leicht zu verstehen)

    get("/hoge") { "hogeres" }
    post("/foo/boo") { FooControler.boo() }

Wenn Sie so etwas implementieren, bedeutet dies, dass die Webanwendung abgeschlossen ist.

Unten finden Sie ein etwas komplizierteres Beispiel. (Bei "Bearbeitung von Anfragen und Antworten" und "Verwenden der Vorlagen-Engine")

get("/boo/hoge") { req , rsp -> BooControler.hoge(req.param("name") , rsp)
    Results.html("freemarker/boo/hoge.html")
}

Ich finde es schön, sowohl einfache als auch schwierige Dinge intuitiv umsetzen zu können.


Andere Implementierungen als Routing

Ich werde die Implementierungen vorstellen, die wahrscheinlich anders als Routing verwendet werden.

Ausnahmebehandlung

Sie können implementieren, worauf reagiert werden soll, wenn eine Ausnahme auftritt.

err { req, rsp, err ->
    val cause = err.cause
    when (cause) {
      is MyException1 -> { /*Antwortimplementierung*/ }
      is MyException2 -> { /*Antwortimplementierung*/ }
      else -> Err.DefHandler().handle(req, rsp, err)
    }
}

Wenn Sie nur bestimmte Ausnahmen behandeln möchten, können Sie auch Folgendes tun.

err(MyException1::class.java) { req, rsp, err -> /*Kürzung*/}

Filter ###

Sie können die Filterung vor und nach der Verarbeitung der Anforderung einfügen. Auf diese Weise können Sie Zugriffsprotokolle ausgeben und HTTP-Header und Cookies einheitlich oder bedingt hinzufügen.

before("**") { req, rsp -> initLoginfo(req, rsp) }

after("**") { req, rsp, result ->
    accessLog(req, rsp, result)
            .header("Access-Control-Allow-Origin", appEnv.allowOrigin)
            .header("Access-Control-Allow-Credentials", true)
}

MODULES

jooby ist eine Idee, die die Funktion durch Angabe des zu verwendenden "Moduls" erweitert. Die Standardunterstützung ist in [MODULE] Mod auf der offiziellen Website beschrieben.

Stellen Sie die Abhängigkeit von Maven und Gradle ein und vor dem Routing Die grundlegende Verwendung besteht darin, Funktionen wie use (<Modulinstanz>) zu implementieren und hinzuzufügen.

Hier sind einige Beispiele.

Wird für die Freemarker Template Engine verwendet

Sie können die Freemarker-Vorlage verwenden, indem Sie wie folgt codieren.

    use(Ftl("/freemarker"))

Im obigen Beispiel Dies bedeutet, dass Sie die Vorlage aus dem Verzeichnis anzeigen, in dem der Klassenpfad an das Freemarker-Verzeichnis übergeben wird.

Wenn Sie die Vorlage tatsächlich verwenden, schreiben Sie den Code wie folgt.

get("/hoge/") {
    Results.html("hoge/index.html")
            .put("hogeParam", hogeBoo.hoge)
}

Im obigen Beispiel können Sie in der Vorlagendatei "freemarker / hoge / index.html" wie die Variable "$ {hogeParam}" auf das Objekt zugreifen. (Sie können Freemarker als Standard verwenden)

Verwenden Sie Jackson für die RESTish API

Wenn Sie wie folgt codieren

    use(Jackson())

Schreiben Sie einfach Code wie "get (" / myjson ") {MyJsonObject (firstName =" Yamada ", name =" tarou ", age =" 25 ")}" und die Antwort wird als json, RESTish zurückgegeben. Es erleichtert das Erstellen von APIs.

Wenn Sie jedoch nur eine Zeichenfolge zurückgeben möchten, verhält sich der Rückgabewert so, als wäre er in doppelte Anführungszeichen eingeschlossen. (Zum Beispiel führt "get (" / living / chek ") {" I'm lebendig "}" dazu, dass die Antwortzeichenfolge "Ich bin am Leben" lautet. ")

Wenn Sie eine andere Antwort als json zurückgeben möchten, ist es meiner Meinung nach besser, Jackson json selbst bilden zu lassen, als "use (Jackson ())" zu verwenden.


Anderes Micro-Web-Framework

Ein weiteres beliebtes "Micro Web Framework" ist [Spark Framework] sp. Die Idee, einen Pfad einer Antwort zuzuordnen, ähnelt jooby.

In Bezug auf die Einfachheit ist es noch einfacher als jooby. Jooby scheint jedoch für eine gute Handhabung einfacher zu sein. Auch in Bezug auf die Erweiterbarkeit mit [MODULES] und mod denke ich, dass jooby besser dran sein wird.

Bitte vergleichen Sie je nach Situation, welche besser ist.


jooby Wie war es?

Viel Glück


Verwandte Seite

Recommended Posts

Wenn Sie "Spring Boot" satt haben, probieren Sie doch "jooby".
Wenn Sie es leid sind, ER-Diagramme zu zeichnen
Wenn @Transactional of Spring Boot nicht funktioniert
[Spring Boot] Wenn Sie Spring Boot verwenden, war es praktisch, viele Dienstprogramme zu verwenden.
Wenn Sie die Spring Boot + Thymeleaf-Verarbeitung trennen möchten
Versuchen Sie Spring Boot von 0 bis 100.
Beginnen Sie mit Spring Boot
Versuchen Sie es mit Spring Boot Security
Versuchen Sie Spring Boot auf dem Mac
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
Spring Boot 2.0 Actuator, 3 Änderungen, die Sie wissen müssen, damit es funktioniert
Memorandum beim Spring Boot 1.5.10 → Spring Boot 2.0.0
Nachricht erlöschen (Spring Boot)
Erhalten Sie Validierungsergebnisse mit Spring Boot
Versuchen Sie, Spring Boot auf Kubernetes auszuführen
Spring Boot + MyBatis Ich erhalte diesen Fehler, wenn ich die Datenbank nicht einstelle