Ajouter une URL relative à java.net.URL
À condition d'avoir un java.net.URL de l'objet, pointant vers disons
http://example.com/myItems
ou http://example.com/myItems/
Est-il un helper quelque part pour ajouter des URL relatives pour cela?
Par exemple ajouter ./myItemId
ou myItemId
pour obtenir :
http://example.com/myItems/myItemId
- double possible de la Construction d'une URL absolue à partir d'une URL relative en Java servlet
- Il semble qu'il n'y est pas de solution simple. Soit l'URL ou URI classe ne prend pas en charge cette fonction. Apache HttpClient aussi n'a pas de support pour cela.
Vous devez vous connecter pour publier un commentaire.
URL
a un constructeur qui prend une baseURL
et unString
spec.Sinon,
java.net.URI
adhère plus étroitement aux normes, et a unrésoudre
méthode pour faire la même chose. Créer unURI
de votreURL
à l'aide deURL.le t
.Celui-ci n'a pas besoin d'un syndicat ou d'un code et donne le résultat souhaité:
Cette affiche:
La accepté de répondre ne fonctionne que si il n'y a pas de chemin après que l'hôte (à mon humble avis l'on a accepté la réponse est fausse)
MalformedUrlException
pourquoi ne pas simplement jeter décoché exception :'(url1.getFile().endsWith("/") ? url1.getFile() + "pet" : url1.getFile() + "/pet"
?Ici est une fonction d'aide je l'ai écrit pour ajouter le chemin d'accès d'url:
baseUrl
se termine avec un/
ouextraPath
commence avec un/
vous aurez répété/
dans l'URL finale. Vous devez ajouter un.normalize()
avant la dernièretoURL()
.J'ai cherché un peu partout une réponse à cette question. La seule application que je peux trouver est dans le SDK Android: Uri.Constructeur. J'ai extrait mes propres fins.
Cette est là que j'ai trouvé la source.
En conjonction avec Apache URIBuilder, c'est comment je l'utilise:
builder.setPath(appendSegmentToPath(builder.getPath(), segment));
Vous pouvez utiliser URIBuilder et la méthode
URI#normalize
pour éviter de dupliquer des/
dans l'URI:URIBuilder
semble pas faire partie du JDK. Peut-être que vous devriez mentionner le paquet/bibliothèque qui fournit laURIBuilder
classe.Mis à JOUR
Je crois que c'est le plus court de solution:
new URL("/additional/relative/path");
jette MalformedURLExceptionQuelques exemples d'utilisation de l'Apache URIBuilder http://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/client/utils/URIBuilder.html:
Ex1:
Résultat 1 -> http://example.com/test/example
Ex2:
Résultat 2 -> http://example.com/test/example
Vous pouvez simplement utiliser le
URI
classe pour ce:Note le slash sur le chemin de la base et de la base par rapport au format du segment qui est annexé. Vous pouvez également utiliser le
URIBuilder
classe de client HTTP Apache:...
Concaténer un chemin relatif vers un URI:
res
contiendrahttps://stackoverflow.com/questions/some/path
uri.getPath
au lieu de cela, merci!J'ai eu quelques difficultés avec l'encodage des URI. Ajoutant a pas de travail pour moi car il a un contenu://le type et il a été de ne pas aimer le "/". Cette solution n'assume aucune requête, ni fragment(nous travaillons avec des chemins, après tout):
Kotlin code:
Ma solution basée sur twhitbeck réponse:
Test:
Gist: https://gist.github.com/enginer/230e2dc2f1d213a825d5
Pour android assurez-vous d'utiliser
.appendPath()
deandroid.net.Uri
Sur Android, vous pouvez utiliser
android.net.Uri
. La suite permet de créer unUri.Builder
à partir d'une URL existante commeString
puis ajouter:Noter que
appendEncodedPath
ne vous attendez pas à un leader/
et contient seulement un vérifiez si le "baseUrl" se termine par un, sinon on est ajoutée avant le chemin d'accès.