Manolis Karamanis
Manolis Karamanis

Reputation: 788

How to build url in java?

I am building a String with StringBuilder

StringBuilder builder = new StringBuilder();
builder.append("my parameters");
builder.append("other parameters");

Then i build a Url

Url url = new Url(builder.toString());

And then i try the connection

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

But the url seems not to be right from the results i get. It's like some parameter is being false passed. That's why i think the problem is in the part of the StringBuilder.

The problem is in a double parameter i try to pass.

double longitude = 23.433114;
String lng = String.ValueOf(longitude);

And then i put it in the url. But if i give it as a string the result is correct.

String lng = "23.433114"

Is UrlEncoding necessary? I will try what is suggested below.

Upvotes: 45

Views: 94093

Answers (3)

Tonsic
Tonsic

Reputation: 1138

And another option, this time using Spring framework (especially useful when doing some automated tests)

UriComponentsBuilder.newInstance()
                .scheme(URIScheme.HTTP.getId())
                .host("host")
                .port(8000)
                .path("/employee")
                .pathSegment("{employeeName}", "{anotherThing}")
                // this build(xxx) will automatically perform encoding
                .build("John", "YetMoreData")
                .toURL();

Upvotes: 1

jhkuperus
jhkuperus

Reputation: 1469

Try apache's URIBuilder : [Documentation]

import org.apache.http.client.utils.URIBuilder;

// ...

URIBuilder b = new URIBuilder("http://example.com");
b.addParameter("t", "search");
b.addParameter("q", "apples");

Url url = b.build().toUrl();

Maven dependency:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>

Upvotes: 101

Luiggi Mendoza
Luiggi Mendoza

Reputation: 85789

Since you want to create the URL and consume it through a GET request, it would be better to use a library that helps you in this process. You can use HttpComponents or another library like Unirest that is built on top of HttpComponents which ease all this work.

Here's an example using Unirest:

HttpResponse<String> stringResponse = Unirest.get("https://www.youtube.com/results")
    .field("search_query", "eñe")
    .asString();
System.out.println(stringResponse.getBody());

This will retrieve the HTML response corresponding to all the results from a search on youtube using "eñe". The ñ character will be encoded for you.

DISCLAIMER: I'm not attached to Unirest in any mean. I'm not a developer or a sponsor of this project. I'm only a happy user of this framework.

Upvotes: 4

Related Questions