- Reading JSON From a URL in Java
- Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:
- 1. Introduction
- 2. Using Core Java Classes
- 3. Using commons-io and org.json
- 4. Less Code With Jackson and the ObjectMapper
- 4.1. Deserializing to a Generic Object
- 4.2. Deserializing to a Custom Class
- 5. Conclusion
- Обзор REST. Часть 2: коммуникация между клиентом и сервером
- Запросы
- URI и Ресурсы
- HTTP метод
- Заголовки
- Тело запроса
- Собираем запросы воедино
- Ответы
- Коды HTTP ответов
Reading JSON From a URL in Java
The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.
To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.
Connect your cluster and start monitoring your K8s costs right away:
We rely on other people’s code in our own work. Every day.
It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.
The problem is, of course, when things fall apart in production — debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky.
Lightrun is a new kind of debugger.
It’s one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics.
Learn more in this quick, 5-minute Lightrun tutorial:
Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.
The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.
Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.
Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:
DbSchema is a super-flexible database designer, which can take you from designing the DB with your team all the way to safely deploying the schema.
The way it does all of that is by using a design model, a database-independent image of the schema, which can be shared in a team using GIT and compared or deployed on to any database.
And, of course, it can be heavily visual, allowing you to interact with the database using diagrams, visually compose queries, explore the data, generate random data, import data or build HTML5 database reports.
The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.
To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.
Connect your cluster and start monitoring your K8s costs right away:
Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:
We’re looking for a new Java technical editor to help review new articles for the site.
1. Introduction
In this quick tutorial, we’re going to create methods able to read JSON data from any URL. We’ll start with core Java classes. Then, we’ll use a few libraries to make our code simpler.
2. Using Core Java Classes
One of the simplest ways to read data from a URL in Java is using the URL class. To use it, we open an input stream to a URL, create an input stream reader, then read all characters. We’ll append these characters to a StringBuilder and then return it as a String:
public static String stream(URL url) < try (InputStream input = url.openStream()) < InputStreamReader isr = new InputStreamReader(input); BufferedReader reader = new BufferedReader(isr); StringBuilder json = new StringBuilder(); int c; while ((c = reader.read()) != -1) < json.append((char) c); >return json.toString(); > >
Consequently, the code includes a lot of boilerplate. Moreover, it would also require even more code if we wanted to convert our JSON into a map or a POJO. Even using the new Java 11 HttpClient, it’s a lot of code for a simple GET request. Also, it doesn’t help with converting the response from strings to POJO. So, let’s explore simpler ways to do this.
3. Using commons-io and org.json
A very popular library is Apache Commons IO. We’ll use IOUtils to read a URL and get a String back. Then, to convert it to a JSONObject, we’ll use the JSON-Java (org.json) library. This is a reference implementation for Java from json.org. Let’s combine them in a new method:
public static JSONObject getJson(URL url)
With JSONObject, we can call get() for any properties and get an Object. There are similarly named methods for specific types. For example:
jsonObject.getString("stringProperty");
4. Less Code With Jackson and the ObjectMapper
There are many solutions for converting JSON into POJO and vice-versa. But, Jackson is widely used in projects like Jersey and other JAX-RS implementations. Let’s add the dependency we need to our pom.xml:
com.fasterxml.jackson.core jackson-databind 2.13.3
With this, not only can we effortlessly read JSON from a URL, but we can also convert it to a POJO at the same time.
4.1. Deserializing to a Generic Object
Most of the action in Jackson comes from the ObjectMapper. The most common scenario for ObjectMapper is to give it a String input and get an object back. Luckily, ObjectMapper can also read input straight from an internet URL:
public static JsonNode get(URL url)
With readTree(), we get a JsonNode, which is a tree-like structure. We read properties with its get() method:
Therefore, we don’t need to map our response to a specific class if we don’t want to.
4.2. Deserializing to a Custom Class
But, for more complex objects, it’s helpful to create a class that represents the JSON structure we expect. We can use generics to create a version of our method capable of mapping the response to any class we want with readValue():
public static T get(URL url, Class type)
Then, as long as our object’s properties and structure match, we’ll get a new instance filled with values from the JSON response.
5. Conclusion
In this article, we learned how to make requests to a URL and get a JSON string back. Then, we used a few libraries to simplify our code. In the end, we read a JSON response while mapping it to a POJO in a couple of lines.
And as always, the source code is available over on GitHub.
Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.
The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.
Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.
Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:
Обзор REST. Часть 2: коммуникация между клиентом и сервером
Часть 1: что такое REST В этой части мы подробно рассмотрим, каким образом происходит коммуникация между клиентом и сервером. Попутно мы будем раскрывать новые термины и давать к ним пояснения. Чтобы все было (стало) понятно, будем разбирать клиент-серверную коммуникацию на примере некоторого RESTful приложения. Допустим, мы разрабатываем веб приложение, которое способно хранить информацию о клиентах и их заказах. Т.е. наша система способна манипулировать некоторыми сущностями: создавать их, редактировать, удалять, выдавать информацию о них. Этими сущностями будут:
- clients — клиенты;
- orders — заказы клиентов;
- items — товары.
В REST архитектуре клиенты отправляют на сервер запросы для получения или модификации данных, а сервера отправляют клиентам ответы на их запросы.
Запросы
URI и Ресурсы
- clients — клиенты;
- orders — заказы клиентов;
- items — товары.
- /clients — URI всех имеющихся клиентов;
- /clients/23 — URI конкретного клиента, а именно клиента с — URI конкретного клиента, а именно клиента с и это еще не все. Мы можем продолжить URI, добавив к нему заказы:
- /clients/4/orders — URI всех заказов клиента №4;
- /clients/1/orders/12 — URI заказа №12 клиента №1.
- /clients/1/orders/12/items — URI списка всех товаров в заказе №12 сделанного клиентом №1.
HTTP метод
- GET — служит для получения информации о конкретном ресурсе (через ID) либо о коллекции ресурсов;
- POST — служит для создания нового ресурса;
- PUT — служит для изменения ресурса (через ID);
- DELETE — служит для удаления ресурса (через ID).
Заголовки
- text — text/plain, text/css, text/html;
- image — image/png, image/jpeg, image/gif;
- audio — audio/wav, audio/mpeg;
- video — video/mp4, video/ogg;
- application — application/json, application/pdf, application/xml, application/octet-stream.
Тело запроса
Пересылаемое клиентом сообщение на сервер. Есть у запроса тело или нет, зависит от типа HTTP запроса. Например, запросы GET и DELETE как правило не содержат никакого тела запроса. А вот PUT и POST могут содержать: тут все дело в функциональном назначении типа запроса. Ведь для получения данных и удаления по id (который передается в URL) не нужно слать на сервер дополнительные данные. А вот для создания нового ресурса (запрос POST) нужно этот ресурс передать. Также как и для модификации существующего ресурса. В REST для передачи тела запроса чаще всего используют форматы XML или JSON. Наиболее часто встречается JSON формат. Предположим, мы хотим отправить на сервер запрос, а в нем — создать новый ресурс. Если ты не забыл, в качестве примера мы рассматривали приложение, которое управляет заказами клиентов. Допустим, мы хотим создать нового клиента. В нашем случае мы храним следующую информацию о клиентах: Имя Email Номер телефона Тогда телом такого запроса может быть следующий JSON:
Собираем запросы воедино
Итак, мы рассмотрели с тобой из чего может состоять клиентский запрос. Приведем теперь несколько примеров запросов с описанием
GET /clients/23 Accept : application/json, application/xml
Ответы
Коды HTTP ответов
- 201 Created;
- 401 Unauthorized;
- 507 Insufficient Storage.
- 1ХХ — информационные;
- 2ХХ — информируют о случаях успешного принятия и обработки запроса клиента;
- 3ХХ — сообщают клиенту, что для успешного выполнения операции необходимо сделать другой запрос, как правило по другому URI;
- 4ХХ — ошибка клиента. Например, неправильно составленный запрос или же широко известный код 404 Not Found, которая может возникнуть, когда клиент запрашивает несуществующий ресурс;
- 5ХХ — ошибка сервера. Возвращается клиенту в случае неудачного выполнения операции по вине сервера.