diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml
index 7e994fb52b..984d9b3a18 100644
--- a/jackson-modules/jackson-conversions-2/pom.xml
+++ b/jackson-modules/jackson-conversions-2/pom.xml
@@ -32,6 +32,18 @@
jackson-dataformat-csv
${jackson.version}
+
+
+ org.mock-server
+ mockserver-netty
+ ${mockserver-netty.version}
+ test
+
+
+ org.json
+ json
+ ${json.version}
+
@@ -44,4 +56,9 @@
+
+ 5.13.2
+ 20220320
+
+
\ No newline at end of file
diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java
new file mode 100644
index 0000000000..9c9f1fd7c4
--- /dev/null
+++ b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java
@@ -0,0 +1,62 @@
+package com.baeldung.jackson.jsonurlreader;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.charset.Charset;
+
+import org.apache.commons.io.IOUtils;
+import org.json.JSONObject;
+
+import com.fasterxml.jackson.core.exc.StreamReadException;
+import com.fasterxml.jackson.databind.DatabindException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class JsonUrlReader {
+
+ public static void main(String[] args) throws StreamReadException, DatabindException, MalformedURLException, IOException {
+ String url = args[0];
+
+ JsonNode node = JsonUrlReader.get(url);
+ System.out.println(node.toPrettyString());
+ }
+
+ public static String stream(String url) throws IOException {
+ try (InputStream input = new URL(url).openStream()) {
+ InputStreamReader isr = new InputStreamReader(input, Charset.forName("UTF-8"));
+ BufferedReader reader = new BufferedReader(isr);
+ StringBuilder json = new StringBuilder();
+ int c;
+ while ((c = reader.read()) != -1) {
+ json.append((char) c);
+ }
+ return json.toString();
+ }
+ }
+
+ public static JsonNode get(String url) throws StreamReadException, DatabindException, MalformedURLException, IOException {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode json = mapper.readTree(new URL(url));
+ return json;
+ }
+
+ public static T get(String url, Class type) throws StreamReadException, DatabindException, MalformedURLException, IOException {
+ ObjectMapper mapper = new ObjectMapper();
+ T entity = mapper.readValue(new URL(url), type);
+ return entity;
+ }
+
+ public static String getString(String url) throws StreamReadException, DatabindException, MalformedURLException, IOException {
+ return get(url).toPrettyString();
+ }
+
+ public static JSONObject getJson(String url) throws MalformedURLException, IOException {
+ String json = IOUtils.toString(new URL(url), Charset.forName("UTF-8"));
+ JSONObject object = new JSONObject(json);
+ return object;
+ }
+}
diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java
new file mode 100644
index 0000000000..062ee51b20
--- /dev/null
+++ b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java
@@ -0,0 +1,40 @@
+package com.baeldung.jackson.jsonurlreader.data;
+
+public class Example {
+ private String name;
+ private Integer n;
+ private Boolean real;
+
+ public Example() {
+ }
+
+ public Example(String name, Integer n, Boolean real) {
+ this.name = name;
+ this.n = n;
+ this.real = real;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getN() {
+ return n;
+ }
+
+ public void setN(Integer n) {
+ this.n = n;
+ }
+
+ public Boolean getReal() {
+ return real;
+ }
+
+ public void setReal(Boolean real) {
+ this.real = real;
+ }
+}
diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java
new file mode 100644
index 0000000000..5debc73e0f
--- /dev/null
+++ b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java
@@ -0,0 +1,62 @@
+package com.baeldung.jackson.jsonurlreader;
+
+import static org.mockserver.integration.ClientAndServer.startClientAndServer;
+import static org.mockserver.model.HttpRequest.request;
+import static org.mockserver.model.HttpResponse.response;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.mockserver.client.MockServerClient;
+import org.mockserver.integration.ClientAndServer;
+import org.mockserver.model.HttpStatusCode;
+
+import com.baeldung.jackson.jsonurlreader.data.Example;
+
+public class JsonMockServer {
+ protected static final String JSON_RESPONSE = "{ \"name\": \"A\", \"n\": 1, \"real\": true }";
+ protected static final Example OBJECT_RESPONSE = new Example("A", 1, true);
+
+ protected static String serviceUrl;
+
+ private static final String SERVER_ADDRESS = "127.0.0.1";
+ private static final String PATH = "/sample-json";
+
+ private static ClientAndServer mockServer;
+ private static int serverPort;
+
+ @BeforeAll
+ static void startServer() throws IOException {
+ serverPort = getFreePort();
+ serviceUrl = "http://" + SERVER_ADDRESS + ":" + serverPort + PATH;
+
+ mockServer = startClientAndServer(serverPort);
+
+ mockJsonRequest();
+ }
+
+ @AfterAll
+ static void stopServer() {
+ mockServer.stop();
+ }
+
+ @SuppressWarnings("resource")
+ private static void mockJsonRequest() {
+ new MockServerClient(SERVER_ADDRESS, serverPort)
+ .when(request()
+ .withPath(PATH)
+ .withMethod("GET"))
+ .respond(response()
+ .withStatusCode(HttpStatusCode.OK_200.code())
+ .withBody(JSON_RESPONSE)
+ );
+ }
+
+ private static int getFreePort() throws IOException {
+ try (ServerSocket serverSocket = new ServerSocket(0)) {
+ return serverSocket.getLocalPort();
+ }
+ }
+}
diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java
new file mode 100644
index 0000000000..b450ed5a83
--- /dev/null
+++ b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java
@@ -0,0 +1,50 @@
+package com.baeldung.jackson.jsonurlreader;
+
+import static org.junit.Assert.assertEquals;
+
+import org.json.JSONObject;
+import org.junit.jupiter.api.Test;
+
+import com.baeldung.jackson.jsonurlreader.data.Example;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class JsonUrlReaderIntegrationTest extends JsonMockServer {
+
+ @Test
+ public void whenStreamUrl_thenJsonStringReturned() throws Exception {
+ String jsonNode = JsonUrlReader.stream(serviceUrl);
+
+ assertEquals(jsonNode, JSON_RESPONSE);
+ }
+
+ @Test
+ public void whenGetUrl_thenJsonNodeReturned() throws Exception {
+ JsonNode jsonNode = JsonUrlReader.get(serviceUrl);
+
+ assertEquals(jsonNode.get("name")
+ .textValue(), "A");
+ assertEquals(jsonNode.get("n")
+ .intValue(), 1);
+ assertEquals(jsonNode.get("real")
+ .booleanValue(), true);
+ }
+
+ @Test
+ public void givenType_whenGetUrl_thenTypeReturned() throws Exception {
+ Example object = JsonUrlReader.get(serviceUrl, Example.class);
+
+ Integer n = 1;
+ assertEquals(object.getName(), "A");
+ assertEquals(object.getN(), n);
+ assertEquals(object.getReal(), true);
+ }
+
+ @Test
+ public void whenGetJsonUrl_thenJsonObjectReturned() throws Exception {
+ JSONObject jsonObject = JsonUrlReader.getJson(serviceUrl);
+
+ assertEquals(jsonObject.getString("name"), "A");
+ assertEquals(jsonObject.getInt("n"), 1);
+ assertEquals(jsonObject.getBoolean("real"), true);
+ }
+}