2017-07-17 3 views
0

javax.ws.rs.core.UriBuilder n'échappe pas } correctement:javax UriBuilder n'échappe pas '}' correctement

import javax.ws.rs.core.UriBuilder; 
public void test() { 
    final UriBuilder builder = UriBuilder.fromUri("http://host"); 
    builder.path("dir}one"); 
    l.info(builder.toString()); 
} 

Affichera http://host/dir}one, laissant } non échappés.

Alors que org.apache.http.client.utils.URIBuilder:

org.apache.http.client.utils.URIBuilder; 
public void testApache() { 
    final URIBuilder builder = new URIBuilder(URI.create("http://host")); 
    builder.setPath("dir}one"); 
    l.info(builder.toString()); 
} 

Affichera http://hostdir%7Done, échappant } avec %7D comme prévu. Est-ce un bug dans le javax.ws.rs.core.UriBuilder?

Répondre

1

Selon RFC 3986 le caractère } est pas un caractère réservé et donc il n'a pas besoin d'être échappées. Il peut être échappé avec % 7D, mais ce n'est pas nécessaire.

Les deux implémentations UriBuilder se comportent donc correctement.

+0

Si vous passez en revue les réponses de cette [question] (https://stackoverflow.com/questions/1547899/quelles-characters-make-a-url-invalid), vous voyez des mentions de '}' comme caractère non sage ou interdit. Il n'y a pas de consensus clair, mais il semble toujours que le choix le plus judicieux est d'y échapper. – Roland

+1

en effet plus sage, surtout lorsqu'on pense à des programmes traitant un tel URI. Je préférerais l'encoder aussi, mais ce n'est pas une erreur de ne pas l'encoder, donc en fait votre code devrait être capable de gérer de tels caractères non codés –