java / expert
Snippet
Benutzerdefinierte RequestCondition für semantische API-Versionierung
Benutzerdefinierte RequestConditions ermöglichen eine anspruchsvolle Request-Mapping-Logik, die über den Standardabgleich von URLs oder Parametern hinausgeht. Durch die Implementierung dieses Interfaces können Sie Anfragen basierend auf benutzerdefinierten Headern, Medientypen oder sogar komplexer Geschäftslogik wie Feature-Flags an spezifische Controller-Methoden leiten.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ApiVersionCondition implements RequestCondition<ApiVersionCondition> {private final String version;@Overridepublic ApiVersionCondition getMatchingCondition(HttpServletRequest request) {String header = request.getHeader("X-API-Version");return version.equals(header) ? this : null;}@Overridepublic int compareTo(ApiVersionCondition other, HttpServletRequest request) {return other.version.compareTo(this.version);}// combine and other methods omitted}
spring
Erklärung
1
public class ApiVersionCondition implements RequestCondition<ApiVersionCondition>
Definiert einen Vertrag für das HandlerMapping von Spring zur Auswertung benutzerdefinierter Logik.
2
return version.equals(header) ? this : null;
Gibt diese Bedingung zurück, wenn die Anfrage die Kriterien erfüllt, andernfalls null.
3
return other.version.compareTo(this.version);
Bestimmt, welches Mapping Vorrang hat, wenn mehrere Methoden auf die Anfrage passen.