Commit b7039b66 authored by DANIEL DIAZ SANCHEZ's avatar DANIEL DIAZ SANCHEZ
Browse files

Update README.md

parent 0220ee96
......@@ -152,8 +152,34 @@ Podemos realizar múltiples peticiones con un bucle. En el caso que veremos ahor
Para ello usaremos una clase nueva llamada `MyRequest_sequential.java` con el código:
```java
package CdistRest;
import kong.unirest.HttpResponse;
import kong.unirest.Unirest;
public class MyRequest_sequential {
public static void main(String args[]) {
System.out.println("Test sending post to http://localhost:8080/vote several times");
for (int i = 0; i < 5; i++) {
System.out.println();
HttpResponse<String> res = Unirest.post("http://localhost:8080/vote").field("vote", "1")
.field("username", "test@example").asString();
System.out.println("Request number " + i + " answered with status " + res.getStatus());
}
}
}
```
Prueba con diferente número de peticiones y observa como los votos se contabilizan.
## Formato JSON
......@@ -163,6 +189,7 @@ En la prueba anterior hemos realizado peticiones en un formato específico de la
La información que obtenemos como respuesta a las peticiones que hacemos a nuestra aplicación es HTML, que es bastante complicado de interpretar de forma automática. De hecho, HTML está destinado a presentar información más que a comunicar información estructurada entre máquinas, por eso decimos que nuestra aplicación es rudimentaria (ya la evolucionaremos más adelante).
Uno de los formatos más comunes para intercambiar información es JSON. Aquí tenéis un ejemplo de una información codificada en JSON:
```json
[
{"firstName":"John", "lastName":"Doe"},
......@@ -170,117 +197,132 @@ Uno de los formatos más comunes para intercambiar información es JSON. Aquí t
{"firstName":"Peter", "lastName": "Jones"}
]
```
Para procesar JSON usaremos la librería [GSON de Google](https://github.com/google/gson). Añadiremos esta dependencia usando maven. La porción XML para añadir la puedes encontrar en la página del proyecto, haciendo click en maven. Te llevará a esta [página en el caso de la versión 2.7](http://search.maven.org/#artifactdetails%7Ccom.google.code.gson%7Cgson%7C2.7%7C)
En la página puedes encontrar la porción de XML que sería:
Para procesar JSON usaremos la librería [GSON de Google](https://github.com/google/gson).
Añadiremos esta dependencia usando maven a un nuevo proyecto, por ejemplo `JsonTest`. Lo convertimos en maven haciendo click derecho sobre el proyecto en `Configure > Convert to Maven Project`.
Añadimos la dependencia de Maven. La porción XML para añadir la puedes encontrar en la página del proyecto (https://github.com/google/gson), haciendo click en maven.
En la página puedes encontrar la porción de XML que sería, para la versión 2.8.6 (puede que haya otra versión, siempre usa la más moderna en tus aplicaciones aunque este código está probado para la versión 2.8.6):
```xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
```
Quedando el final del fichero pom.xml así:
```xml
...
</build>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.7</version>
<version>2.8.6</version>
</dependency>
</dependencies>
</project>
```
Guarda el fichero y prueba este código:
Guarda el fichero `pom` y continúa. Crea una clase llamada `TestJSON.java`.
Y usa el siguiente código:
```java
package cdistRest;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
public class TestJSON {
public class Employee {
private String firstName;
private String lastName;
public Employee(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public String toString()
{
return "name : " + firstName + " surname : " + lastName;
}
}
public TestJSON() {
// Crear un JSON
Collection<Employee> colection = new ArrayList<Employee>();
Employee e1 = new Employee("John", "Doe");
Employee e2 = new Employee("Anna", "Smith");
Employee e3 = new Employee("Peter", "Jones");
colection.add(e1);
colection.add(e2);
colection.add(e3);
Gson gson = new Gson();
String json_represntation = gson.toJson(colection);
System.out.print(json_represntation);
// al revés, pero más complicado
// procesar un mensaje recibido con JSON, en el que no solo hay tipos Empoyee
/*
{
"mensaje": "mi mensaje",
"id": "21"
public TestJSON() {
// Crear un JSON
Collection<Employee> colection = new ArrayList<Employee>();
Employee e1 = new Employee("John", "Doe");
Employee e2 = new Employee("Anna", "Smith");
Employee e3 = new Employee("Peter", "Jones");
colection.add(e1);
colection.add(e2);
colection.add(e3);
Gson gson = new Gson();
String json_represntation = gson.toJson(colection);
System.out.print(json_represntation);
// al revés, pero más complicado
// procesar un mensaje recibido con JSON, en el que no solo hay tipos Empoyee
/*
{
"mensaje": "mi mensaje",
"id": "21"
}
[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName": "Jones"}
]
*/
/* los pares string : string son como Maps<String, String> */
/* los pares string : object son Maps<String, Object> */
Type jType = new TypeToken<HashMap<String,Object>>(){}.getType();
String json_recibido = "{\"mensaje\": \"mi mensaje\", \"id\": \"21\"}";
String json_recibido2 = "[{\"firstName\":\"John\", \"lastName\":\"Doe\"},{\"firstName\":\"Anna\", \"lastName\":\"Smith\"},{\"firstName\":\"Peter\", \"lastName\": \"Jones\"}]";
HashMap<String,Object> mensaje = gson.fromJson(json_recibido, jType);
System.out.println(mensaje.get("mensaje"));
System.out.println(mensaje.get("id"));
//JsonParser parser = new JsonParser();
JsonArray employees = JsonParser.parseString(json_recibido2).getAsJsonArray();
for(JsonElement jemployee : employees)
{
Employee employee = gson.fromJson(jemployee, cdistRest.Employee.class);
System.out.println("Info empleado " + employee.toString());
}
[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName": "Jones"}
]
*/
/* los pares string : string son como Maps<String, String> */
/* los pares string : object son Maps<String, Object> */
Type jType = new TypeToken<HashMap<String,Object>>(){}.getType();
String json_recibido = "{\"mensaje\": \"mi mensaje\", \"id\": \"21\"}";
String json_recibido2 = "[{\"firstName\":\"John\", \"lastName\":\"Doe\"},{\"firstName\":\"Anna\", \"lastName\":\"Smith\"},{\"firstName\":\"Peter\", \"lastName\": \"Jones\"}]";
HashMap<String,Object> mensaje = gson.fromJson(json_recibido, jType);
System.out.println(mensaje.get("mensaje"));
System.out.println(mensaje.get("id"));
JsonParser parser = new JsonParser();
JsonArray employees = parser.parse(json_recibido2).getAsJsonArray();
for(JsonElement jemployee : employees)
{
Employee employee = gson.fromJson(jemployee, Employee.class);
System.out.println("Info empleado " + employee.toString());
}
}
public static void main(String args[]) {
new TestJSON();
}
}
public static void main(String args[]) {
new TestJSON();
}
}
```
Si trabajas con Java 11, deberás cambiar el fichero `module-info.java` para que funcione:
```java
module JsonTest {
requires com.google.gson;
exports cdistRest to com.google.gson;
}
```
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment