是否有Java獨立實現來提取URI-Template(RFC 6570)定義的URI中的參數值?用於提取URI模板(RFC 6570)中的值的獨立Java實現?
我發現最好的實現是一個Ruby實現(https://github.com/sporkmonger/addressable)
通過http://code.google.com/p/uri-templates/wiki/Implementations我發現了一個Java實現:手持URI模板
它支持的URI的模板與參數分辨率值轉換爲最終的URI。不幸的是,它不能做相反的事情:根據URI-Template提取URI中的參數值。
JAX-RS(或Restlet)的實現在內部具有此功能。 但似乎沒有隔離可以獨立使用的這個功能模塊。
有沒有人有另一種想法?
下面一個例子使用Spring的Web:
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()));
}
}
另一個澤西島(JAX-RS實現):
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();
}
}
隨着接口:
public interface UriParser {
public Set<String> getVariables();
public Map<String, String> parse(final String uri);
}
你有沒有找到解決方案?我正在尋找完全相同的,但它看起來像我必須帶來我自己的實施... –
你可能看看谷歌HTTP客戶端,它具有類似的功能。請參閱https://code.google.com/p/google-http-java-client/ – sappenin