Gibt es eine Java Standalone-Implementierung zum Extrahieren von Werten von Parametern in einem URI, wie von einem URI-Template (RFC 6570) definiert?Standalone-Java-Implementierung zum Extrahieren von Werten in URI-Vorlage (RFC 6570)?
Die beste Umsetzung ich gefunden habe, ist eine Ruby-Implementierung (https://github.com/sporkmonger/addressable)
Via http://code.google.com/p/uri-templates/wiki/Implementations ich eine Java-Implementierung gefunden: Handy-URI-Templates
Es unterstützt die Auflösung eines URI-Template mit dem Parameter Werte zu einem endgültigen URI. Leider kann es nicht umgekehrt werden: Extraktion von Parameterwerten im URI nach URI-Template.
Implementierungen der JAX-RS (oder Restlet) haben diese Funktion intern. Aber keiner scheint dieses Feature-Modul isoliert zu haben, das unabhängig verwendet werden könnte.
Hat jemand eine andere Idee?
Hier ein Beispiel feder Web zu verwenden:
import org.springframework.web.util.UriTemplate;
public class UriParserSpringImpl implements UriParser {
private final UriTemplate uriTemplate;
private final String uriTemplateStr;
public UriParserSpringImpl(final String template) {
this.uriTemplateStr = template;
this.uriTemplate = new UriTemplate(template);
}
@Override
public Map<String, String> parse(final String uri) {
final boolean match = this.uriTemplate.matches(uri);
if (!match) {
return null;
}
return uriUtils.decodeParams(this.uriTemplate.match(uri));
}
@Override
public Set<String> getVariables() {
return Collections.unmodifiableSet(new LinkedHashSet<String>(this.uriTemplate.getVariableNames()));
}
}
Ein weiteres für Jersey (JAX-RS-Implementierung):
import com.sun.jersey.api.uri.UriTemplate;
public class UriParserJerseyImpl implements UriParser {
private final UriTemplate uriTemplate;
private final Map<String, String> valuesMaps;
public UriParserJerseyImpl(final String template) {
this.uriTemplate = new UriTemplate(template);
final Map<String, String> valuesMaps = new HashMap<String, String>();
for (final String prop : this.uriTemplate.getTemplateVariables()) {
valuesMaps.put(prop, null);
}
this.valuesMaps = Collections.unmodifiableMap(valuesMaps);
}
@Override
public Map<String, String> parse(final String uri) {
final Map<String, String> values = new HashMap<String, String>(this.valuesMaps);
final boolean match = this.uriTemplate.match(uri, values);
if (!match) {
return null;
}
return values;
}
@Override
public Set<String> getVariables() {
return this.valuesMaps.keySet();
}
}
Mit Schnittstelle:
public interface UriParser {
public Set<String> getVariables();
public Map<String, String> parse(final String uri);
}
Haben Sie schon einmal eine Lösung gefunden? Ich bin auf der Suche nach genau das gleiche, aber es sieht so aus, als müsste ich meine eigene Implementierung mitbringen ... –
Sie könnten sich vielleicht den Google http-Client ansehen, der ähnliche Funktionen hat. Siehe https://code.google.com/p/google-http-java-client/ – sappenin