2017-04-27 3 views
2

J'ai suivi le tutoriel disponible en here pour remplacer les paramètres de chemin avec des valeurs données et couru le code exemple qui est donné ci-dessouscomment utiliser des modèles URI pour modifier les paramètres de chemin dans une URL en java

import org.glassfish.jersey.uri.UriTemplate; 

import javax.ws.rs.core.UriBuilder; 
import java.net.URI; 
import java.util.HashMap; 
import java.util.Map; 

public class Demo { 
    public static void main(String[] args) { 
     String template = "http://example.com/name/{name}/age/{age}"; 
     UriTemplate uriTemplate = new UriTemplate(template); 
     String uri = "http://example.com/name/Bob/age/47"; 
     Map<String, String> parameters = new HashMap<>(); 

     // Not this method returns false if the URI doesn't match, ignored 
     // for the purposes of the this blog. 
     uriTemplate.match(uri, parameters); 
     System.out.println(parameters); 
     parameters.put("name","Arnold"); 
     parameters.put("age","110"); 

     UriBuilder builder = UriBuilder.fromPath(template); 
     URI output = builder.build(parameters); 
     System.out.println(output.toASCIIString()); 


    } 
} 

mais quand je compiler le code, il me donne cette erreur

Exception in thread "main" java.lang.IllegalArgumentException: The template variable 'age' has no value

S'il vous plaît, aidez-moi à résoudre ce problème, (Peut être mes importations causent le problème)

Répondre

2
public static void main(String[] args) { 
    String template = "http://example.com/name/{name}/age/{age}"; 
    UriTemplate uriTemplate = new UriTemplate(template); 
    String uri = "http://example.com/name/Bob/age/47"; 
    Map<String, String> parameters = new HashMap<>(); 

    // Not this method returns false if the URI doesn't match, ignored 
    // for the purposes of the this blog. 
    uriTemplate.match(uri, parameters); 
    System.out.println(parameters); 
    parameters.put("name","Arnold"); 
    parameters.put("age","110"); 

    UriBuilder builder = UriBuilder.fromPath(template); 
    // Use .buildFromMap() 
    URI output = builder.buildFromMap(parameters); 
    System.out.println(output.toASCIIString()); 

} 

Si vous utilisez .build pour remplir le modèle, vous devez fournir les valeurs une par une comme .build("Arnold", "110"). Dans votre cas, vous souhaitez utiliser .buildFromMap() avec votre carte parameters.