Wie oben erwähnt, erfolgt das Routing durch Schreiben eines Handlers, der jedem Pfad in der Klasse "Chain" zugeordnet ist. Die offizielle Dokumentation finden Sie in Chain's Javadoc. Wenn Sie sie hier nicht erklären können, lesen Sie dies bitte. ..
Die grundlegendste Methode in "Chain" ist "all (Handler)", was angibt, dass alle Anforderungen von diesem Handler verarbeitet werden. Jede der anderen Methoden ist eigentlich nur eine bequeme Methode mit "Bedingungen zum Akzeptieren von Anforderungen", die dieser Methode hinzugefügt wurden. Intern wird jede statische Dienstprogrammmethode von "Handlern" verarbeitet, indem der übergebene "Handler" umbrochen wird.
Diejenigen, die "Class
Im Folgenden werde ich die wichtigsten Methoden erläutern (alle sind aufgrund der großen Menge unmöglich).
Methode | Die Bedingung, unter der der Handler aufgerufen wird |
---|---|
all(Handler) |
Sie müssen |
files() |
Siehe unten |
onlyIf(Predicate<Context>, Handler) |
Predicate Abertrue Wann |
when(boolean/Predicate, Action<Chain>) |
Boolescher Wert oderPredicate Abertrue Wann,Action<Chain> Delegiert |
prefix(String, Action<Chain>) |
Wenn der Pfad mit der angegebenen Zeichenfolge beginntDurch relativen Pfad aufgelöstAction<Chain> Delegiert |
path(Handler) |
Wenn die Anforderung mit dem angegebenen Pfad übereinstimmt |
get(String, Handler) |
Wenn der angegebene Pfad übereinstimmt und die GET-Methode aufgerufen wird |
post(String, Handler) |
Wenn der angegebene Pfad übereinstimmt und die POST-Methode aufgerufen wird |
patch(String, Handler) |
Wenn der angegebene Pfad übereinstimmt und die PATCH-Methode aufgerufen wird |
put(String, Handler) |
Wenn der angegebene Pfad übereinstimmt und die PUT-Methode aufgerufen wird |
delete(String, Handler) |
Wenn der angegebene Pfad übereinstimmt und die DELETE-Methode aufgerufen wird |
chain.prefix( "hoge", innerChain -> {
innerChain.get( "piyo", handler ); // /hoge/piyo
} );
Darüber hinaus bietet "Context" praktische Methoden mit den Namen "byMethod ()" und "byContent", mit denen Sie Zweige ideologisch beschreiben können.
//Pfad"hoge"Verzweigen Sie mit GET und POST, wenn Sie dazu aufgefordert werden
chain.path( "hoge", ctx -> {
ctx.byMethod( m -> {
m.get( iCtx -> iCtx.render( "get" ) );
m.post( iCtx -> iCtx.render( "post" ) );
} );
} );
// "hoge"Von der Anfrage`Accept`Verzweigen Sie nach dem Wert des Headers
chain.path( "hoge", ctx -> ctx.byContent( accept -> {
accept.json( iCtx -> iCtx.render("json") );
accept.xml( iCtx -> iCtx.render( "xml" ) );
accept.noMatch( iCtx -> iCtx.render( "no match" ) );
} ) );
Der Variablenname ist hier übrigens fest geschrieben, kann aber auch in der Methodenkette beschrieben werden.
Sie können Literale wie reguläre Ausdrücke für die im Pfad angegebene Zeichenfolge verwenden und Pfadparameter festlegen.
Art | Syntax | Beispiel |
---|---|---|
wörtlich | foo |
"foo" |
Literal für reguläre Ausdrücke | ::<<regex>> |
"foo/::\d+" |
Optionales Pfad-Token | :<<token-name>>? |
"foo/:val?" |
Erforderliches Pfad-Token | :<<token-name>> |
"foo/:val" |
Optionales Pfad-Token für reguläre Ausdrücke | :<<token-name>>?:<<regex>> |
"foo/:val?:\d+" |
Erforderliches Pfad-Token für reguläre Ausdrücke | :<<token-name>>:<<regex>> |
"foo/:val:\d+" |
(Übersetzt aus Javadoc)
Pfadparameter können über die PathTokens-Klasse abgerufen werden, die mit Context.getPathToken () abgerufen werden kann.
chain.get( "hoge/:name", ctx -> ctx.render( "name: " + ctx.getPathTokens().get( "name" ) ) );
chain.get( "piyo/:id:\\d+", ctx -> ctx.render( "id: " + ctx.getPathTokens().asLong( "id" ) ) );
Pfad | Ergebnis |
---|---|
/hoge | 404 |
/hoge/John | "name: John" |
/piyo/hoge | 404 |
/piyo/123 | "id: 123" |
Die Context
-Klasse ist eine Klasse, die Informationen darüber enthält, wie eine einzelne Anforderung aufgerufen wird.
Wie wir in Hello World gesehen haben, ist "Handler" ein Lambda-Ausdruck, der "Context" empfängt. Daher ist der Verarbeitungsfluss
Kontext empfangen-> Verschiedene Verarbeitungen durchführen-> Context.render () aufrufen, um eine Antwort zu erstellen
Es wird in Form von sein.
Dies ist der Teil nach ?
Der URL.
Sie können es als Map von getRequest (). GetQueryParams ()
erhalten.
Wie oben erwähnt, verwenden Sie "getPathToken ()".
Formularparameter, die von HTTP-Tags "