[JAVA] Créer une API REST avec Spring JPA Data avec REST et Lombok incroyablement facile.

En parlant d'applications Web ces jours-ci, REST

De nos jours, les applications Web s'exécutent sur des navigateurs de niveau client avec HTML + JavaScript, et le serveur adopte une architecture qui fournit des données à l'aide de l'API REST. Dans cet article, je vais vous montrer à quel point il est facile de créer une API REST de serveur en Java.

Spring Boot + Lombok Spring Boot facilite la création d'applications Web. Vous pouvez également utiliser Lombok pour éliminer le code redondant de Java. Cette fois, en combinant les deux, vous pouvez créer une API REST terriblement facilement. À titre d'exemple, créez une API qui peut REST TODO.

procédure

  1. Créez une base pour votre application avec SPRING INITIALIZR. image.png Dépendances sélectionnées JPA, H2, Lombok, Rest Repositories Est spécifié. Appuyez sur Générer un projet pour télécharger le fichier zip et le décompresser.

  2. Définition des données et création d'applications Créez la structure de données en tant que classe Java.

package com.ukiuni.easyrest.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import lombok.Data;

@Data
@Entity
public class Todo {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	private String title;
	private String description;
	private boolean done;
	@Temporal(TemporalType.TIMESTAMP)
	private Date deadline;
}

Kimo est @Data de l'annotation attachée à la classe. Une annotation définie par Lombok qui attribue automatiquement les méthodes d'accès. Cela permet au programmeur de se concentrer sur la définition des données par champ sans écrire de getters / setters redondants.

Définissez une classe pour faire de cette structure de données la structure de type CRUD de l'API REST telle quelle.

package com.ukiuni.easyrest.repository;

import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import com.ukiuni.easyrest.entity.Todo;

@RepositoryRestResource(collectionResourceRel = "todos", path = "todos")
public interface TodoRepository extends PagingAndSortingRepository<Todo, Long> {
}

Définissez simplement l'interface. Pas besoin de mettre en œuvre le contenu.

C'est la fin de la description du code source. Facile.

Lancement et fonctionnement

Commencez. Dans le répertoire des applications

gradle bootRun

Commencer avec.

Exploitons-le. Utilisez la commande curl.

$ curl -i http://localhost:8080/todos
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 16 Nov 2017 11:47:24 GMT

{
  "_embedded" : {
    "todos" : [ ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/todos"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 0,
    "totalPages" : 0,
    "number" : 0
  }
}

Vous pouvez voir que des données vides ont été acquises avec "todos": []. Maintenant, créons un Todo. Utilisez la commande curl.

$ curl -i -X POST -H "Content-Type:application/json" -d "{  \"title\" : \"Calendrier de l'Avent\",  \"description\" : \"Je dois écrire un article.\", \"deadline\":\"2017-12-21T07:00:00.000Z\" }" http://localhost:8080/todos
{
  "title" : "Calendrier de l'Avent",
  "description" : "Je dois écrire un article.",
  "done" : false,
  "deadline" : "2017-12-21T07:00:00.000+0000",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos/1"
    },
    "todo" : {
      "href" : "http://localhost:8080/todos/1"
    }
  }
}

Il semble que le n ° 1 ait été créé. Je vais vérifier.

$ curl -i http://localhost:8080/todos
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 16 Nov 2017 11:50:57 GMT

{
  "_embedded" : {
    "todos" : [ {
      "title" : "Calendrier de l'Avent",
      "description" : "Je dois écrire un article.",
      "done" : false,
      "deadline" : "2017-12-21T07:00:00.000+0000",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/todos/1"
        },
        "todo" : {
          "href" : "http://localhost:8080/todos/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/todos"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

Vous pouvez obtenir ce que vous avez créé. Je mettrai à jour avec PUT.

$curl -i -X PUT -H "Content-Type:application/json" -d "{  \"title\" : \"Calendrier de l'Avent\",  \"description\" : \"Je dois écrire un article. Faisons de notre mieux.\", \"deadline\":\"2017-12-21T07:00:00.000Z\" }" http://localhost:8080/todos/1
HTTP/1.1 200
Location: http://localhost:8080/todos/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 16 Nov 2017 11:43:30 GMT

{
  "title" : "Calendrier de l'Avent",
  "description" : "Je dois écrire un article. Faisons de notre mieux.",
  "done" : false,
  "deadline" : "2017-12-21T07:00:00.000+0000",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos/1"
    },
    "todo" : {
      "href" : "http://localhost:8080/todos/1"
    }
  }
}

Je vais vérifier.

$ curl -i http://localhost:8080/todos
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 16 Nov 2017 11:51:55 GMT

{
  "_embedded" : {
    "todos" : [ {
      "title" : "Calendrier de l'Avent",
      "description" : "Je dois écrire un article. Faisons de notre mieux.",
      "done" : false,
      "deadline" : "2017-12-21T07:00:00.000+0000",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/todos/1"
        },
        "todo" : {
          "href" : "http://localhost:8080/todos/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/todos"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

Il a été mis à jour.

Enfin, supprimez-le.

$ curl -i -X DELETE http://localhost:8080/todos/1
HTTP/1.1 204
Date: Thu, 16 Nov 2017 11:45:45 GMT

Confirmez qu'il a disparu.

$ curl -i http://localhost:8080/todos
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 16 Nov 2017 11:47:24 GMT

{
  "_embedded" : {
    "todos" : [ ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/todos{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile/todos"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 0,
    "totalPages" : 0,
    "number" : 0
  }
}

"todos": [] Il a disparu.

comment c'est? C'est horriblement facile, n'est-ce pas?

Nous avons pu créer une API REST simplement en créant une structure de données et une classe Repository pour la publication. L'utilisation de la force de définition de type et des capacités d'annotation de Java facilite la création d'une API REST. comment c'est? Java n'est souvent pas aimé de nos jours, mais l'avez-vous passé en revue? Veuillez utiliser Java avec élégance.

Un exemple de code peut être trouvé à ici.

Tout cela vient du terrain.

Recommended Posts

Créer une API REST avec Spring JPA Data avec REST et Lombok incroyablement facile.
Création d'un référentiel commun avec Spring Data JPA
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
OU rechercher avec la spécification Spring Data Jpa
Spring avec Kotorin --2 RestController et Data Class
Méthode d'implémentation pour source multi-données avec Spring boot (Mybatis et Spring Data JPA)
Trier par Spring Data JPA (avec tri par clé composée)
Un mémorandum lors de l'essai de Spring Data JPA avec STS
J'ai essayé de démarrer avec Spring Data JPA
Jusqu'à l'utilisation de Spring Data et JPA Part 2
Un mémorandum lors de la création d'un service REST avec Spring Boot
J'ai essayé le guide d'introduction de Spring Boot [Accès aux données avec JPA]
Voir le comportement des mises à jour d'entités avec Spring Boot + Spring Data JPA
Spring avec Kotorin - 4 Conception d'API REST
[Comment installer Spring Data Jpa]
Liaison de données avec Spark et Cassandra
Sortie du journal Spring Data JPA SQL
Je veux afficher des images avec REST Controller de Java et Spring!