Добавить относительный URL к java.net.URL - PullRequest
32 голосов
/ 21 сентября 2011

При условии, что у меня есть объект java.net.URL, указывающий на, скажем,

http://example.com/myItems или http://example.com/myItems/

Есть ли где-нибудь помощник, чтобы добавить к этому некоторый относительный URL?Например, добавьте ./myItemId или myItemId, чтобы получить: http://example.com/myItems/myItemId

Ответы [ 13 ]

0 голосов
/ 22 мая 2019

На Android вы можете использовать android.net.Uri.Следующее позволяет создать Uri.Builder из существующего URL-адреса как String, а затем добавить:

Uri.parse(baseUrl) // Create Uri from String
    .buildUpon()   // Creates a "Builder"
    .appendEncodedPath("path/to/add")
    .build()

Обратите внимание, что appendEncodedPath не ожидает начальный / и содержит только проверку, если«baseUrl» оканчивается на единицу, в противном случае он добавляется перед путем.

0 голосов
/ 20 февраля 2017

Для Android убедитесь, что вы используете .appendPath() из android.net.Uri

0 голосов
/ 10 октября 2014

Мое решение основано на ответе twhitbeck:

import java.net.URI;
import java.net.URISyntaxException;

public class URIBuilder extends org.apache.http.client.utils.URIBuilder {
    public URIBuilder() {
    }

    public URIBuilder(String string) throws URISyntaxException {
        super(string);
    }

    public URIBuilder(URI uri) {
        super(uri);
    }

    public org.apache.http.client.utils.URIBuilder addPath(String subPath) {
        if (subPath == null || subPath.isEmpty() || "/".equals(subPath)) {
            return this;
        }
        return setPath(appendSegmentToPath(getPath(), subPath));
    }

    private String appendSegmentToPath(String path, String segment) {
        if (path == null || path.isEmpty()) {
            path = "/";
        }

        if (path.charAt(path.length() - 1) == '/' || segment.startsWith("/")) {
            return path + segment;
        }

        return path + "/" + segment;
    }
}

Тест:

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class URIBuilderTest {

    @Test
    public void testAddPath() throws Exception {
        String url = "http://example.com/test";
        String expected = "http://example.com/test/example";

        URIBuilder builder = new URIBuilder(url);
        builder.addPath("/example");
        assertEquals(expected, builder.toString());

        builder = new URIBuilder(url);
        builder.addPath("example");
        assertEquals(expected, builder.toString());

        builder.addPath("");
        builder.addPath(null);
        assertEquals(expected, builder.toString());

        url = "http://example.com";
        expected = "http://example.com/example";

        builder = new URIBuilder(url);
        builder.addPath("/");
        assertEquals(url, builder.toString());
        builder.addPath("/example");
        assertEquals(expected, builder.toString());
    }
}

Суть: https://gist.github.com/enginer/230e2dc2f1d213a825d5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...