[JAVA] Die Fallstricke von JAX-RS WebTarget.queryParam ()

Beachten Sie, dass ich von den Spezifikationen von WebTarget.queryParam () des JAX-RS-Clients abhängig war.

Problem

Klicken Sie hier, um die Spezifikationen von WebTarget.queryParam () anzuzeigen (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/WebTarget.html#queryParam-java.lang.String-java). lang.Object ...-). Es ist eine Methode zum Festlegen von Abfrageparametern für WebTarget.

Diese Methode und die URI-Codierung weisen eine Einschränkung auf.

Die URI-Vorlage ist eine Funktion, die den Pfadparameter in den von {} umgebenen Teil einfügt. Wenn Sie jedoch darüber nachdenken, liegt ein kleines Problem vor. Das Problem ist, dass der Abfrageparameterwert nicht "{" oder "}" selbst enthalten kann. Dies liegt daran, dass sowohl "{" als auch "}" als Pfadparameter interpretiert werden.

Um dies zu vermeiden, müssen "{" und "}" URI-codiert sein. Dies bedeutet, dass es% 7b bzw.% 7d sein sollte.

In Implementierungen wie Jersey und RESTEasy führt diese Methode jedoch eine URI-Codierung wie oben beschrieben durch. Wenn sie also wie sie ist erneut URI-codiert wird, sollte sie in% 257b und% 257d konvertiert werden. Mit anderen Worten, wenn Sie {oder} nicht verwenden können, ...?

Problemumgehung

Die Jersey-Implementierung vermeidet eine doppelte URI-Codierung, um dies zu vermeiden. Insbesondere lautet die Regel, dass% nicht codiert wird, wenn nach% zwei aufeinanderfolgende Hexadezimalzeichen (0-9a-fA-F) stehen. Es ist also in Ordnung, {,} so zu codieren, wie es ist.

Wenn Sie dagegen nach% zwei aufeinanderfolgende Hexadezimalzeichen haben, wird% nicht URL-codiert.

Daher ist es besser, sich vor dem Aufruf von queryParam () ** immer mit URI zu codieren.

Ich weiß nicht, was die anderen Implementierungen tun. Auf den ersten Blick scheint der RESTEasy-Code% überhaupt nicht codiert zu sein.

Das obige Verhalten kann natürlich nicht aus den JAX-RS-Spezifikationen gelesen werden (implementierungsabhängig). Überprüfen wir also den Vorgang, bevor wir ihn verwenden.

Recommended Posts

Die Fallstricke von JAX-RS WebTarget.queryParam ()
[Frühling] Fallstricke von BeanUtils.copyProperties
Fallstricke von NextInt () → nextLine ()
Subtile Fallstricke von Lombok
Die Fallstricke von Active Hash
Ausgabe in Vielfachen von 3
Java-Implementierung von Tri-Tree
Implementierung von HashMap mit Kotlin
Reihenfolge der Routenauswertung in Spark
Einführung von javaFX in Eclipse (April 2020)
Unterschiede in den Split-Methoden von StringUtils
Implementierung der asynchronen Verarbeitung in Tomcat
Liste der in Java 9 hinzugefügten Mitglieder
Liste der in Java 9 hinzugefügten Typen
Reihenfolge der Verarbeitung im Programm
Implementierung einer ähnlichen Funktion in Java
Anzahl der Ziffern des numerischen Typs
Arten von Ausnahmen in Geschäftssystemen