2012-11-18 25 views
7

URI-Template (RFC 6570) tarafından tanımlanan şekilde bir URI'de parametre değerlerini ayıklamak için Java bağımsız bir uygulaması var mı? Handy-URI ŞablonlarBağımsız Java Uygulama URI Şablonu (RFC 6570) değerlerini ayıklamak için?

Bu parametre ile bir URI Şablon çözünürlüğünü destekler:

buldum iyi uygulama bir Java uygulaması bulunan bir yakut uygulama (https://github.com/sporkmonger/addressable)

Via http://code.google.com/p/uri-templates/wiki/Implementations olduğunu nihai URI'ye değerler. Ne yazık ki, tersi yapamaz: URI-Template'e göre URI'de parametre değerlerinin çıkarılması.

JAX-RS'nin (veya Restlet) implentasyonları dahili olarak bu özelliğe sahiptir. Fakat hiçbiri bağımsız olarak kullanılabilecek bu özellik modülünü izole etmiş gibi görünmüyor.

Başka bir fikri olan var mı? İşte


bir örnek yay Web Kullanılır: arayüz ile

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); 
} 
Jersey (JAX-RS uygulama) için
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())); 
    } 
} 

Başka

+0

Hiç bir çözüm buldunuz mu? Ben tam olarak aynı arıyorum ama kendi uygulama getirmek zorunda gibi görünüyor ... –

+0

Muhtemelen benzer işlevselliğe sahip Google http istemcisi bakabilir. Bkz. Https://code.google.com/p/google-http-java-client/ – sappenin

cevap

-5

java.net.URI

Parametreler, örneklendikten sonra ayarlanamaz, ancak güzel bir alıcı kümesi vardır ve bunu değiştirmek için yeni bir tane oluşturabilirsiniz.

+0

Bu, https://tools.ietf.org/html/rfc6570 tarafından tanımlanan URI Şablonları ile ilgisi yoktur. – deamon

0

damnhandy uri template library tam olarak bu özellik için bir open issue sahiptir. Birleştirilen özellik için PR'yi zaten aldım ve 2.2 sürümünde olmalı! Oraya git ve bakıcıları ilgilendiğini bilmelerine izin ver.

Ayrıca bekleyemiyorsanız, bunu nasıl yaptığımı görebilirsiniz here ve bunu kendiniz için kullanabilirsiniz.