• leandro pereira

Spring Data REST: Um CRUD pronto em 5 minutos

O módulo data rest do spring nos ajuda a disponibilizar operações CRUD com o mínimo de esforço possível. Imagine que você precise implementar um cadastro de produtos com regras complexas, mas que, antes disso, também tenha que ter um cadastro de “categoria de produtos”, que simplesmente insere uma nova categoria sem nenhuma regra complexa para se preocupar. Nesse contexto, o spring data rest pode facilitar bastante o trabalho, disponibilizando todas as operações no padrão REST para isso.


Vamos lá!!!


A primeira coisa que vamos precisar é incluir a dependência no projeto.



<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId></dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>



Feito isso, vamos criar a entidade PERSON, que será utilizada para o exemplo:



@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String document;

    [...] //Getters and Setters	
}


E para finalizar(SIM, já estamos finalizando), criamos a classe Repository da entidade, onde vamos ter a anotação responsável por disponibilizar as operações rest.



@RepositoryRestResource(collectionResourceRel = "persons", path = "persons")
public interface PersonRepository extends JpaRepository<Person, Long> {
}


Pronto!!! Já temos várias operações REST funcionando. Vamos testar?

Lembrando que foi usado o banco H2 para facilitar a implementação.



Vamos fazer um POST para a url http://localhost:8080/persons, com o seguinte payload:


{
 "name": "Steve Rogers",
 "document": "0000000001"
}    

Nesse caso temos como response um 201 Created e o body:


{
 "name": "Steve Rogers",
 "document": "0000000001",
 "_links": {
 "self": {
 "href": "http://localhost:8080/persons/1 "
        },
 "person": {
 "href": "http://localhost:8080/persons/1 "
        }
    }
}

Note que o retorno já faz referência a url GET do próprio registro.

Para fazer update dos dados, podemos fazer um POST para a url http://localhost:8080/persons/1 com o seguinte payload:


{
 "name": "Tony Stark",
 "document": "0000000001"
}

E para deletar fazemos DELETE para a mesma url, e nesse caso receberemos como retorno o código 204 No Content.

Após isso, se fizermos um GET para a url acima, passaremos a receber um 404 Not Found, já que o registro foi deletado.

Então é isso pessoal, exemplo simples, mas que pode ajudar no ganho de produtividade no dia a dia.

Até a próxima!!


Posts recentes

Ver tudo