├── .gitignore
├── Adicionando cache
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ ├── AutorExistenteException.java
│ │ │ ├── AutorNaoEncontradoException.java
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Adicionando comentários ao recurso Livro
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Adicionando o recurso Autor à nossa API
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Autenticação com Spring Security
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── config
│ │ │ └── WebSecurityConfig.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ ├── AutorExistenteException.java
│ │ │ ├── AutorNaoEncontradoException.java
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Buscando um livro com o uso da anotação @PathVariable
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Cliente Java
├── pom.xml
└── src
│ └── main
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── aplicacao
│ ├── Aplicacao.java
│ ├── Autor.java
│ ├── Comentario.java
│ ├── DetalhesErro.java
│ └── Livro.java
├── Cliente JavaScript
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── algaworks
│ │ └── socialbooks
│ │ ├── aplicacao
│ │ └── Aplicacao.java
│ │ └── client
│ │ ├── LivrosClient.java
│ │ └── domain
│ │ ├── Autor.java
│ │ ├── Comentario.java
│ │ ├── DetalhesErro.java
│ │ └── Livro.java
│ └── resources
│ ├── index.html
│ └── livrosClient.js
├── Criando o projeto
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ └── SocialbooksApplication.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Criando uma representação para o recurso Livro
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Cross-Origin Resource Sharing (CORS)
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── config
│ │ │ └── WebSecurityConfig.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ ├── AutorExistenteException.java
│ │ │ ├── AutorNaoEncontradoException.java
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Deletando o recurso Livro com o DELETE
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Evoluindo nosso cliente Java
├── pom.xml
└── src
│ └── main
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ ├── aplicacao
│ └── Aplicacao.java
│ └── client
│ ├── LivrosClient.java
│ └── domain
│ ├── Autor.java
│ ├── Comentario.java
│ ├── DetalhesErro.java
│ └── Livro.java
├── Evoluindo nosso recurso Autor
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ ├── AutorExistenteException.java
│ │ │ ├── AutorNaoEncontradoException.java
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Finalizando nosso cliente Java
├── pom.xml
└── src
│ └── main
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ ├── aplicacao
│ └── Aplicacao.java
│ └── client
│ ├── LivrosClient.java
│ └── domain
│ ├── Autor.java
│ ├── Comentario.java
│ ├── DetalhesErro.java
│ └── Livro.java
├── Finalizando o tratamento das respostas
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Interagindo com o banco de dados
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Listando os comentários do recurso Livro
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Manipulando erros com @ExceptionHandler e @ControllerAdvice
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Melhorando o design do nosso código
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Modelando nosso primeiro recurso
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Negociação de conteúdos com Media Type
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ ├── AutorExistenteException.java
│ │ │ ├── AutorNaoEncontradoException.java
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── PUT para atualizar o recurso Livro
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Salvando o recurso Livro a partir de um POST
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Testando nossos recursos e formatando nossas representações JSON
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Autor.java
│ │ │ ├── Comentario.java
│ │ │ ├── DetalhesErro.java
│ │ │ └── Livro.java
│ │ │ ├── handler
│ │ │ └── ResourceExceptionHandler.java
│ │ │ ├── repository
│ │ │ ├── AutoresRepository.java
│ │ │ ├── ComentariosRepository.java
│ │ │ └── LivrosRepository.java
│ │ │ ├── resources
│ │ │ ├── AutoresResource.java
│ │ │ └── LivrosResources.java
│ │ │ └── services
│ │ │ ├── AutoresService.java
│ │ │ ├── LivrosService.java
│ │ │ └── exceptions
│ │ │ ├── AutorExistenteException.java
│ │ │ ├── AutorNaoEncontradoException.java
│ │ │ └── LivroNaoEncontradoException.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Tratamento correto das respostas HTTP 404 e 201
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ ├── repository
│ │ │ └── LivrosRepository.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
├── Utilizando a anotação @JsonInclude
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── algaworks
│ │ │ └── socialbooks
│ │ │ ├── SocialbooksApplication.java
│ │ │ ├── domain
│ │ │ ├── Comentario.java
│ │ │ └── Livro.java
│ │ │ └── resources
│ │ │ └── LivrosResources.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── algaworks
│ └── socialbooks
│ └── SocialbooksApplicationTests.java
└── Validando as entradas na nossa API
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── algaworks
│ │ └── socialbooks
│ │ ├── SocialbooksApplication.java
│ │ ├── domain
│ │ ├── Autor.java
│ │ ├── Comentario.java
│ │ ├── DetalhesErro.java
│ │ └── Livro.java
│ │ ├── handler
│ │ └── ResourceExceptionHandler.java
│ │ ├── repository
│ │ ├── AutoresRepository.java
│ │ ├── ComentariosRepository.java
│ │ └── LivrosRepository.java
│ │ ├── resources
│ │ ├── AutoresResource.java
│ │ └── LivrosResources.java
│ │ └── services
│ │ ├── AutoresService.java
│ │ ├── LivrosService.java
│ │ └── exceptions
│ │ ├── AutorExistenteException.java
│ │ ├── AutorNaoEncontradoException.java
│ │ └── LivroNaoEncontradoException.java
└── resources
│ └── application.properties
└── test
└── java
└── com
└── algaworks
└── socialbooks
└── SocialbooksApplicationTests.java
/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 | .DS_Store
3 | Servers/*
4 | .metadata
5 | .settings
6 | .classpath
7 | .project
8 | target/
9 | bin/
10 | rebel.xml
11 | .mvn*
12 | mvnw*
13 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando cache/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Adicionando cache/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Adicionando cache/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.FetchType;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.JoinColumn;
11 | import javax.persistence.ManyToOne;
12 |
13 | import com.fasterxml.jackson.annotation.JsonIgnore;
14 |
15 | @Entity
16 | public class Comentario {
17 |
18 | @Id
19 | @GeneratedValue(strategy = GenerationType.IDENTITY)
20 | private Long id;
21 |
22 | private String texto;
23 |
24 | private String usuario;
25 |
26 | private Date data;
27 |
28 | @ManyToOne(fetch = FetchType.LAZY)
29 | @JoinColumn(name = "LIVRO_ID")
30 | @JsonIgnore
31 | private Livro livro;
32 |
33 | public Long getId() {
34 | return id;
35 | }
36 |
37 | public void setId(Long id) {
38 | this.id = id;
39 | }
40 |
41 | public String getTexto() {
42 | return texto;
43 | }
44 |
45 | public void setTexto(String texto) {
46 | this.texto = texto;
47 | }
48 |
49 | public String getUsuario() {
50 | return usuario;
51 | }
52 |
53 | public void setUsuario(String usuario) {
54 | this.usuario = usuario;
55 | }
56 |
57 | public Date getData() {
58 | return data;
59 | }
60 |
61 | public void setData(Date data) {
62 | this.data = data;
63 | }
64 |
65 | public Livro getLivro() {
66 | return livro;
67 | }
68 |
69 | public void setLivro(Livro livro) {
70 | this.livro = livro;
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/handler/ResourceExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.handler;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | import org.springframework.http.HttpStatus;
6 | import org.springframework.http.ResponseEntity;
7 | import org.springframework.web.bind.annotation.ControllerAdvice;
8 | import org.springframework.web.bind.annotation.ExceptionHandler;
9 |
10 | import com.algaworks.socialbooks.domain.DetalhesErro;
11 | import com.algaworks.socialbooks.services.exceptions.LivroNaoEncontradoException;
12 |
13 | @ControllerAdvice
14 | public class ResourceExceptionHandler {
15 |
16 | @ExceptionHandler(LivroNaoEncontradoException.class)
17 | public ResponseEntity handleLivroNaoEncontradoException
18 | (LivroNaoEncontradoException e, HttpServletRequest request) {
19 |
20 | DetalhesErro erro = new DetalhesErro();
21 | erro.setStatus(404l);
22 | erro.setTitulo("O livro não pôde ser encontrado");
23 | erro.setMensagemDesenvolvedor("http://erros.socialbooks.com/404");
24 | erro.setTimestamp(System.currentTimeMillis());
25 |
26 | return ResponseEntity.status(HttpStatus.NOT_FOUND).body(erro);
27 | }
28 | }
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Adicionando comentários ao recurso Livro /src/main/resources/application.properties
--------------------------------------------------------------------------------
/Adicionando comentários ao recurso Livro /src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/domain/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import javax.persistence.Entity;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.OneToMany;
11 |
12 | import com.fasterxml.jackson.annotation.JsonIgnore;
13 |
14 | @Entity
15 | public class Autor {
16 |
17 | @Id
18 | @GeneratedValue(strategy = GenerationType.IDENTITY)
19 | private Long id;
20 |
21 | private String nome;
22 |
23 | private Date nascimento;
24 |
25 | private String nacionalidade;
26 |
27 | @OneToMany(mappedBy = "autor")
28 | @JsonIgnore
29 | private List livros;
30 |
31 | public Long getId() {
32 | return id;
33 | }
34 |
35 | public void setId(Long id) {
36 | this.id = id;
37 | }
38 |
39 | public String getNome() {
40 | return nome;
41 | }
42 |
43 | public void setNome(String nome) {
44 | this.nome = nome;
45 | }
46 |
47 | public Date getNascimento() {
48 | return nascimento;
49 | }
50 |
51 | public void setNascimento(Date nascimento) {
52 | this.nascimento = nascimento;
53 | }
54 |
55 | public String getNacionalidade() {
56 | return nacionalidade;
57 | }
58 |
59 | public void setNacionalidade(String nacionalidade) {
60 | this.nacionalidade = nacionalidade;
61 | }
62 |
63 | public List getLivros() {
64 | return livros;
65 | }
66 |
67 | public void setLivros(List livros) {
68 | this.livros = livros;
69 | }
70 |
71 | }
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.FetchType;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.JoinColumn;
11 | import javax.persistence.ManyToOne;
12 |
13 | import com.fasterxml.jackson.annotation.JsonIgnore;
14 |
15 | @Entity
16 | public class Comentario {
17 |
18 | @Id
19 | @GeneratedValue(strategy = GenerationType.IDENTITY)
20 | private Long id;
21 |
22 | private String texto;
23 |
24 | private String usuario;
25 |
26 | private Date data;
27 |
28 | @ManyToOne(fetch = FetchType.LAZY)
29 | @JoinColumn(name = "LIVRO_ID")
30 | @JsonIgnore
31 | private Livro livro;
32 |
33 | public Long getId() {
34 | return id;
35 | }
36 |
37 | public void setId(Long id) {
38 | this.id = id;
39 | }
40 |
41 | public String getTexto() {
42 | return texto;
43 | }
44 |
45 | public void setTexto(String texto) {
46 | this.texto = texto;
47 | }
48 |
49 | public String getUsuario() {
50 | return usuario;
51 | }
52 |
53 | public void setUsuario(String usuario) {
54 | this.usuario = usuario;
55 | }
56 |
57 | public Date getData() {
58 | return data;
59 | }
60 |
61 | public void setData(Date data) {
62 | this.data = data;
63 | }
64 |
65 | public Livro getLivro() {
66 | return livro;
67 | }
68 |
69 | public void setLivro(Livro livro) {
70 | this.livro = livro;
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/handler/ResourceExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.handler;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | import org.springframework.http.HttpStatus;
6 | import org.springframework.http.ResponseEntity;
7 | import org.springframework.web.bind.annotation.ControllerAdvice;
8 | import org.springframework.web.bind.annotation.ExceptionHandler;
9 |
10 | import com.algaworks.socialbooks.domain.DetalhesErro;
11 | import com.algaworks.socialbooks.services.exceptions.LivroNaoEncontradoException;
12 |
13 | @ControllerAdvice
14 | public class ResourceExceptionHandler {
15 |
16 | @ExceptionHandler(LivroNaoEncontradoException.class)
17 | public ResponseEntity handleLivroNaoEncontradoException
18 | (LivroNaoEncontradoException e, HttpServletRequest request) {
19 |
20 | DetalhesErro erro = new DetalhesErro();
21 | erro.setStatus(404l);
22 | erro.setTitulo("O livro não pôde ser encontrado");
23 | erro.setMensagemDesenvolvedor("http://erros.socialbooks.com/404");
24 | erro.setTimestamp(System.currentTimeMillis());
25 |
26 | return ResponseEntity.status(HttpStatus.NOT_FOUND).body(erro);
27 | }
28 | }
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/resources/AutoresResource.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.http.HttpStatus;
7 | import org.springframework.http.ResponseEntity;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | import com.algaworks.socialbooks.domain.Autor;
13 | import com.algaworks.socialbooks.services.AutoresService;
14 |
15 | @RestController
16 | @RequestMapping("/autores")
17 | public class AutoresResource {
18 |
19 | @Autowired
20 | private AutoresService autoresService;
21 |
22 | @RequestMapping(method = RequestMethod.GET)
23 | public ResponseEntity> listar() {
24 | List autores = autoresService.listar();
25 | return ResponseEntity.status(HttpStatus.OK).body(autores);
26 | }
27 |
28 | }
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 |
11 | @Service
12 | public class AutoresService {
13 |
14 | @Autowired
15 | private AutoresRepository autoresRepository;
16 |
17 | public List listar() {
18 | return autoresRepository.findAll();
19 | }
20 | }
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Adicionando o recurso Autor à nossa API/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Adicionando o recurso Autor à nossa API/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/config/WebSecurityConfig.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.config;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
5 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
6 | import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
7 | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
8 |
9 | @EnableWebSecurity
10 | public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
11 |
12 | @Autowired
13 | public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
14 | auth.inMemoryAuthentication().withUser("algaworks")
15 | .password("s3nh4").roles("USER");
16 | }
17 |
18 | protected void configure(HttpSecurity http) throws Exception {
19 | http.
20 | authorizeRequests()
21 | .antMatchers("/h2-console/**").permitAll()
22 | .anyRequest().authenticated()
23 | .and()
24 | .httpBasic()
25 | .and()
26 | .csrf().disable();
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Autenticação com Spring Security/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Autenticação com Spring Security/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Buscando um livro com o uso da anotação @PathVariable/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Buscando um livro com o uso da anotação @PathVariable/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Buscando um livro com o uso da anotação @PathVariable/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Buscando um livro com o uso da anotação @PathVariable/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.PathVariable;
7 | import org.springframework.web.bind.annotation.RequestBody;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | import com.algaworks.socialbooks.domain.Livro;
13 | import com.algaworks.socialbooks.repository.LivrosRepository;
14 |
15 | @RestController
16 | @RequestMapping("/livros")
17 | public class LivrosResources {
18 |
19 | @Autowired
20 | private LivrosRepository livrosRepository;
21 |
22 | @RequestMapping(method = RequestMethod.GET)
23 | public List listar() {
24 | return livrosRepository.findAll();
25 | }
26 |
27 | @RequestMapping(method = RequestMethod.POST)
28 | public void salvar(@RequestBody Livro livro) {
29 | livrosRepository.save(livro);
30 | }
31 |
32 | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
33 | public Livro buscar(@PathVariable("id") Long id) {
34 | return livrosRepository.findOne(id);
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/Buscando um livro com o uso da anotação @PathVariable/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Buscando um livro com o uso da anotação @PathVariable/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Buscando um livro com o uso da anotação @PathVariable/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Cliente Java/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | com.algaworks.socialbooks
4 | socialbooksapi-client
5 | 1.0.0-SNAPSHOT
6 |
7 |
8 | 1.8
9 |
10 |
11 |
12 |
13 | org.springframework
14 | spring-web
15 | 4.2.5.RELEASE
16 |
17 |
18 | com.fasterxml.jackson.core
19 | jackson-databind
20 | 2.7.2
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/Aplicacao.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.aplicacao;
2 |
3 | import java.net.URI;
4 |
5 | import org.springframework.http.RequestEntity;
6 | import org.springframework.http.ResponseEntity;
7 | import org.springframework.web.client.RestTemplate;
8 |
9 | public class Aplicacao {
10 |
11 | public static void main(String[] args) {
12 |
13 | RestTemplate restTemplate = new RestTemplate();
14 |
15 | RequestEntity request = RequestEntity
16 | .get(URI.create("http://localhost:8080/livros"))
17 | .header("Authorization", "Basic YWxnYXdvcmtzOnMzbmg0").build();
18 |
19 | ResponseEntity response = restTemplate.exchange(request, Livro[].class);
20 |
21 | for(Livro livro : response.getBody()) {
22 | System.out.println("Livro: " + livro.getNome());
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Autor {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date nascimento;
16 |
17 | private String nacionalidade;
18 |
19 | private List livros;
20 |
21 | public Long getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Long id) {
26 | this.id = id;
27 | }
28 |
29 | public String getNome() {
30 | return nome;
31 | }
32 |
33 | public void setNome(String nome) {
34 | this.nome = nome;
35 | }
36 |
37 | public Date getNascimento() {
38 | return nascimento;
39 | }
40 |
41 | public void setNascimento(Date nascimento) {
42 | this.nascimento = nascimento;
43 | }
44 |
45 | public String getNacionalidade() {
46 | return nacionalidade;
47 | }
48 |
49 | public void setNacionalidade(String nacionalidade) {
50 | this.nacionalidade = nacionalidade;
51 | }
52 |
53 | public List getLivros() {
54 | return livros;
55 | }
56 |
57 | public void setLivros(List livros) {
58 | this.livros = livros;
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/Cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 |
5 | import com.fasterxml.jackson.annotation.JsonFormat;
6 | import com.fasterxml.jackson.annotation.JsonProperty;
7 |
8 | public class Comentario {
9 |
10 | private Long id;
11 |
12 | @JsonProperty("comentario")
13 | private String texto;
14 |
15 | private String usuario;
16 |
17 | @JsonFormat(pattern = "dd/MM/yyyy")
18 | private Date data;
19 |
20 | private Livro livro;
21 |
22 | public Long getId() {
23 | return id;
24 | }
25 |
26 | public void setId(Long id) {
27 | this.id = id;
28 | }
29 |
30 | public String getTexto() {
31 | return texto;
32 | }
33 |
34 | public void setTexto(String texto) {
35 | this.texto = texto;
36 | }
37 |
38 | public String getUsuario() {
39 | return usuario;
40 | }
41 |
42 | public void setUsuario(String usuario) {
43 | this.usuario = usuario;
44 | }
45 |
46 | public Date getData() {
47 | return data;
48 | }
49 |
50 | public void setData(Date data) {
51 | this.data = data;
52 | }
53 |
54 | public Livro getLivro() {
55 | return livro;
56 | }
57 |
58 | public void setLivro(Livro livro) {
59 | this.livro = livro;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/Cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/Livro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Livro {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date publicacao;
16 |
17 | private String editora;
18 |
19 | private String resumo;
20 |
21 | private List comentarios;
22 |
23 | private Autor autor;
24 |
25 | public Livro() {}
26 |
27 | public Livro(String nome) {
28 | this.nome = nome;
29 | }
30 |
31 | public Long getId() {
32 | return id;
33 | }
34 |
35 | public void setId(Long id) {
36 | this.id = id;
37 | }
38 |
39 | public String getNome() {
40 | return nome;
41 | }
42 |
43 | public void setNome(String nome) {
44 | this.nome = nome;
45 | }
46 |
47 | public Date getPublicacao() {
48 | return publicacao;
49 | }
50 |
51 | public void setPublicacao(Date publicacao) {
52 | this.publicacao = publicacao;
53 | }
54 |
55 | public String getEditora() {
56 | return editora;
57 | }
58 |
59 | public void setEditora(String editora) {
60 | this.editora = editora;
61 | }
62 |
63 | public String getResumo() {
64 | return resumo;
65 | }
66 |
67 | public void setResumo(String resumo) {
68 | this.resumo = resumo;
69 | }
70 |
71 | public List getComentarios() {
72 | return comentarios;
73 | }
74 |
75 | public void setComentarios(List comentarios) {
76 | this.comentarios = comentarios;
77 | }
78 |
79 | public Autor getAutor() {
80 | return autor;
81 | }
82 |
83 | public void setAutor(Autor autor) {
84 | this.autor = autor;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/Cliente JavaScript/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | com.algaworks.socialbooks
4 | socialbooksapi-client
5 | 1.0.0-SNAPSHOT
6 |
7 |
8 | 1.8
9 |
10 |
11 |
12 |
13 | org.springframework
14 | spring-web
15 | 4.2.5.RELEASE
16 |
17 |
18 | com.fasterxml.jackson.core
19 | jackson-databind
20 | 2.7.2
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/java/com/algaworks/socialbooks/aplicacao/Aplicacao.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.aplicacao;
2 |
3 | import java.text.ParseException;
4 | import java.text.SimpleDateFormat;
5 | import java.util.List;
6 |
7 | import com.algaworks.socialbooks.client.LivrosClient;
8 | import com.algaworks.socialbooks.client.domain.Livro;
9 |
10 | public class Aplicacao {
11 |
12 | public static void main(String[] args) throws ParseException {
13 | LivrosClient cliente =
14 | new LivrosClient("http://localhost:8080", "algaworks", "s3nh4");
15 |
16 | List listaLivros = cliente.listar();
17 |
18 | for(Livro livro : listaLivros) {
19 | System.out.println("Livro: " + livro.getNome());
20 | }
21 |
22 | Livro livro = new Livro();
23 | livro.setNome("Git passo-a-passo");
24 | livro.setEditora("AlgaWorks");
25 |
26 | SimpleDateFormat publicacao = new SimpleDateFormat("dd/MM/yyyy");
27 | livro.setPublicacao(publicacao.parse("01/01/2016"));
28 |
29 | livro.setResumo("este livro aborda tecnicas de desenvolvimento de APIs.");
30 |
31 | String localizacao = cliente.salvar(livro);
32 |
33 | System.out.println("URI do livro salvo: " + localizacao);
34 |
35 | Livro livroBuscado = cliente.buscar(localizacao);
36 |
37 | System.out.println("Livro buscado: " + livroBuscado.getNome());
38 | }
39 | }
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/java/com/algaworks/socialbooks/client/LivrosClient.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client;
2 |
3 | import java.net.URI;
4 | import java.util.Arrays;
5 | import java.util.Base64;
6 | import java.util.List;
7 |
8 | import org.springframework.http.RequestEntity;
9 | import org.springframework.http.ResponseEntity;
10 | import org.springframework.web.client.RestTemplate;
11 |
12 | import com.algaworks.socialbooks.client.domain.Livro;
13 |
14 | public class LivrosClient {
15 |
16 | private RestTemplate restTemplate;
17 |
18 | private String URI_BASE;
19 |
20 | private String URN_BASE = "/livros";
21 |
22 | private String credencial;
23 |
24 | public LivrosClient(String url, String usuario, String senha) {
25 | restTemplate = new RestTemplate();
26 |
27 | URI_BASE = url.concat(URN_BASE);
28 |
29 | String credencialAux = usuario + ":" + senha;
30 |
31 | credencial = "Basic " + Base64.getEncoder()
32 | .encodeToString(credencialAux.getBytes());
33 | }
34 |
35 | public List listar() {
36 | RequestEntity request = RequestEntity
37 | .get(URI.create(URI_BASE))
38 | .header("Authorization", credencial).build();
39 |
40 | ResponseEntity response = restTemplate.exchange(request, Livro[].class);
41 |
42 | return Arrays.asList(response.getBody());
43 | }
44 |
45 | public String salvar(Livro livro) {
46 | RequestEntity request = RequestEntity
47 | .post(URI.create(URI_BASE))
48 | .header("Authorization", credencial)
49 | .body(livro);
50 |
51 | ResponseEntity response = restTemplate.exchange(request, Void.class);
52 |
53 | return response.getHeaders().getLocation().toString();
54 | }
55 |
56 | public Livro buscar(String uri) {
57 | RequestEntity request = RequestEntity
58 | .get(URI.create(uri))
59 | .header("Authorization", credencial)
60 | .build();
61 |
62 | ResponseEntity response = restTemplate.exchange(request, Livro.class);
63 |
64 | return response.getBody();
65 | }
66 | }
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/java/com/algaworks/socialbooks/client/domain/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Autor {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date nascimento;
16 |
17 | private String nacionalidade;
18 |
19 | private List livros;
20 |
21 | public Long getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Long id) {
26 | this.id = id;
27 | }
28 |
29 | public String getNome() {
30 | return nome;
31 | }
32 |
33 | public void setNome(String nome) {
34 | this.nome = nome;
35 | }
36 |
37 | public Date getNascimento() {
38 | return nascimento;
39 | }
40 |
41 | public void setNascimento(Date nascimento) {
42 | this.nascimento = nascimento;
43 | }
44 |
45 | public String getNacionalidade() {
46 | return nacionalidade;
47 | }
48 |
49 | public void setNacionalidade(String nacionalidade) {
50 | this.nacionalidade = nacionalidade;
51 | }
52 |
53 | public List getLivros() {
54 | return livros;
55 | }
56 |
57 | public void setLivros(List livros) {
58 | this.livros = livros;
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/java/com/algaworks/socialbooks/client/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 |
5 | import com.fasterxml.jackson.annotation.JsonFormat;
6 | import com.fasterxml.jackson.annotation.JsonProperty;
7 |
8 | public class Comentario {
9 |
10 | private Long id;
11 |
12 | @JsonProperty("comentario")
13 | private String texto;
14 |
15 | private String usuario;
16 |
17 | @JsonFormat(pattern = "dd/MM/yyyy")
18 | private Date data;
19 |
20 | private Livro livro;
21 |
22 | public Long getId() {
23 | return id;
24 | }
25 |
26 | public void setId(Long id) {
27 | this.id = id;
28 | }
29 |
30 | public String getTexto() {
31 | return texto;
32 | }
33 |
34 | public void setTexto(String texto) {
35 | this.texto = texto;
36 | }
37 |
38 | public String getUsuario() {
39 | return usuario;
40 | }
41 |
42 | public void setUsuario(String usuario) {
43 | this.usuario = usuario;
44 | }
45 |
46 | public Date getData() {
47 | return data;
48 | }
49 |
50 | public void setData(Date data) {
51 | this.data = data;
52 | }
53 |
54 | public Livro getLivro() {
55 | return livro;
56 | }
57 |
58 | public void setLivro(Livro livro) {
59 | this.livro = livro;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/java/com/algaworks/socialbooks/client/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/java/com/algaworks/socialbooks/client/domain/Livro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Livro {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date publicacao;
16 |
17 | private String editora;
18 |
19 | private String resumo;
20 |
21 | private List comentarios;
22 |
23 | private Autor autor;
24 |
25 | public Livro() {}
26 |
27 | public Livro(String nome) {
28 | this.nome = nome;
29 | }
30 |
31 | public Long getId() {
32 | return id;
33 | }
34 |
35 | public void setId(Long id) {
36 | this.id = id;
37 | }
38 |
39 | public String getNome() {
40 | return nome;
41 | }
42 |
43 | public void setNome(String nome) {
44 | this.nome = nome;
45 | }
46 |
47 | public Date getPublicacao() {
48 | return publicacao;
49 | }
50 |
51 | public void setPublicacao(Date publicacao) {
52 | this.publicacao = publicacao;
53 | }
54 |
55 | public String getEditora() {
56 | return editora;
57 | }
58 |
59 | public void setEditora(String editora) {
60 | this.editora = editora;
61 | }
62 |
63 | public String getResumo() {
64 | return resumo;
65 | }
66 |
67 | public void setResumo(String resumo) {
68 | this.resumo = resumo;
69 | }
70 |
71 | public List getComentarios() {
72 | return comentarios;
73 | }
74 |
75 | public void setComentarios(List comentarios) {
76 | this.comentarios = comentarios;
77 | }
78 |
79 | public Autor getAutor() {
80 | return autor;
81 | }
82 |
83 | public void setAutor(Autor autor) {
84 | this.autor = autor;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/resources/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | :: Social Books API
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | ID |
14 | Nome |
15 | Editora |
16 | Publicação |
17 | Resumo |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Cliente JavaScript/src/main/resources/livrosClient.js:
--------------------------------------------------------------------------------
1 | $(function() {
2 | $(".js-load-books").on('click', function() {
3 | $.ajax({
4 | url: "http://localhost:8080/livros",
5 | type: "get",
6 | headers: {
7 | "Authorization" : "Basic YWxnYXdvcmtzOnMzbmg0"
8 | },
9 | success: function(response) {
10 | desenhaTabela(response);
11 | }
12 | });
13 | })
14 | });
15 |
16 | function desenhaTabela(dados) {
17 | $(".js-books-table-body tr").remove();
18 | for(var i=0; i < dados.length; i++) {
19 | desenhaLinha(dados[i]);
20 | }
21 | }
22 |
23 | function desenhaLinha(linha) {
24 | var linhaTabela = $("
");
25 | $(".js-books-table-body").append(linhaTabela);
26 | linhaTabela.append("" + linha.id + " | ");
27 | linhaTabela.append("" + linha.nome + " | ");
28 | linhaTabela.append("" + linha.editora + " | ");
29 | linhaTabela.append("" + linha.publicacao + " | ");
30 | linhaTabela.append("" + linha.resumo + " | ");
31 | }
32 |
--------------------------------------------------------------------------------
/Criando o projeto/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-test
35 | test
36 |
37 |
38 |
39 |
40 |
41 |
42 | org.springframework.boot
43 | spring-boot-maven-plugin
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Criando o projeto/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Criando o projeto/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Criando o projeto/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Criando o projeto/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-test
35 | test
36 |
37 |
38 |
39 |
40 |
41 |
42 | org.springframework.boot
43 | spring-boot-maven-plugin
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/src/main/java/com/algaworks/socialbooks/domain/Livro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | public class Livro {
7 |
8 | private Long id;
9 |
10 | private String nome;
11 |
12 | private Date publicacao;
13 |
14 | private String editora;
15 |
16 | private String resumo;
17 |
18 | private List comentarios;
19 |
20 | private String autor;
21 |
22 | public Livro() {}
23 |
24 | public Livro(String nome) {
25 | this.nome = nome;
26 | }
27 |
28 | public Long getId() {
29 | return id;
30 | }
31 |
32 | public void setId(Long id) {
33 | this.id = id;
34 | }
35 |
36 | public String getNome() {
37 | return nome;
38 | }
39 |
40 | public void setNome(String nome) {
41 | this.nome = nome;
42 | }
43 |
44 | public Date getPublicacao() {
45 | return publicacao;
46 | }
47 |
48 | public void setPublicacao(Date publicacao) {
49 | this.publicacao = publicacao;
50 | }
51 |
52 | public String getEditora() {
53 | return editora;
54 | }
55 |
56 | public void setEditora(String editora) {
57 | this.editora = editora;
58 | }
59 |
60 | public String getResumo() {
61 | return resumo;
62 | }
63 |
64 | public void setResumo(String resumo) {
65 | this.resumo = resumo;
66 | }
67 |
68 | public List getComentarios() {
69 | return comentarios;
70 | }
71 |
72 | public void setComentarios(List comentarios) {
73 | this.comentarios = comentarios;
74 | }
75 |
76 | public String getAutor() {
77 | return autor;
78 | }
79 |
80 | public void setAutor(String autor) {
81 | this.autor = autor;
82 | }
83 |
84 | }
85 |
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.Arrays;
4 | import java.util.List;
5 |
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RequestMethod;
8 | import org.springframework.web.bind.annotation.RestController;
9 |
10 | import com.algaworks.socialbooks.domain.Livro;
11 |
12 | @RestController
13 | public class LivrosResources {
14 |
15 | @RequestMapping(value = "/livros", method = RequestMethod.GET)
16 | public List listar() {
17 |
18 | Livro l1 = new Livro("Rest Aplicado");
19 | Livro l2 = new Livro("Git passo-a-passo");
20 |
21 | Livro[] livros = {l1, l2};
22 |
23 | return Arrays.asList(livros);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Criando uma representação para o recurso Livro/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Criando uma representação para o recurso Livro/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/config/WebSecurityConfig.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.config;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.http.HttpMethod;
5 | import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
6 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
7 | import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
8 | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
9 |
10 | @EnableWebSecurity
11 | public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
12 |
13 | @Autowired
14 | public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
15 | auth.inMemoryAuthentication().withUser("algaworks")
16 | .password("s3nh4").roles("USER");
17 | }
18 |
19 | protected void configure(HttpSecurity http) throws Exception {
20 | http.
21 | authorizeRequests()
22 | .antMatchers("/h2-console/**").permitAll()
23 | .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
24 | .anyRequest().authenticated()
25 | .and()
26 | .httpBasic()
27 | .and()
28 | .csrf().disable();
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Cross-Origin Resource Sharing (CORS)/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Cross-Origin Resource Sharing (CORS)/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.PathVariable;
7 | import org.springframework.web.bind.annotation.RequestBody;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | import com.algaworks.socialbooks.domain.Livro;
13 | import com.algaworks.socialbooks.repository.LivrosRepository;
14 |
15 | @RestController
16 | @RequestMapping("/livros")
17 | public class LivrosResources {
18 |
19 | @Autowired
20 | private LivrosRepository livrosRepository;
21 |
22 | @RequestMapping(method = RequestMethod.GET)
23 | public List listar() {
24 | return livrosRepository.findAll();
25 | }
26 |
27 | @RequestMapping(method = RequestMethod.POST)
28 | public void salvar(@RequestBody Livro livro) {
29 | livrosRepository.save(livro);
30 | }
31 |
32 | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
33 | public Livro buscar(@PathVariable("id") Long id) {
34 | return livrosRepository.findOne(id);
35 | }
36 |
37 | @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
38 | public void deletar(@PathVariable("id") Long id) {
39 | livrosRepository.delete(id);
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Deletando o recurso Livro com o DELETE/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Deletando o recurso Livro com o DELETE/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | com.algaworks.socialbooks
4 | socialbooksapi-client
5 | 1.0.0-SNAPSHOT
6 |
7 |
8 | 1.8
9 |
10 |
11 |
12 |
13 | org.springframework
14 | spring-web
15 | 4.2.5.RELEASE
16 |
17 |
18 | com.fasterxml.jackson.core
19 | jackson-databind
20 | 2.7.2
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/Aplicacao.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.aplicacao;
2 |
3 | import java.text.ParseException;
4 | import java.text.SimpleDateFormat;
5 | import java.util.List;
6 |
7 | import com.algaworks.socialbooks.client.LivrosClient;
8 | import com.algaworks.socialbooks.client.domain.Livro;
9 |
10 | public class Aplicacao {
11 |
12 | public static void main(String[] args) throws ParseException {
13 | LivrosClient cliente = new LivrosClient();
14 |
15 | List listaLivros = cliente.listar();
16 |
17 | for(Livro livro : listaLivros) {
18 | System.out.println("Livro: " + livro.getNome());
19 | }
20 |
21 | Livro livro = new Livro();
22 | livro.setNome("Git passo-a-passo");
23 | livro.setEditora("AlgaWorks");
24 |
25 | SimpleDateFormat publicacao = new SimpleDateFormat("dd/MM/yyyy");
26 | livro.setPublicacao(publicacao.parse("01/01/2016"));
27 |
28 | livro.setResumo("este livro aborda tecnicas de desenvolvimento de APIs.");
29 |
30 | String localizacao = cliente.salvar(livro);
31 |
32 | System.out.println("URI do livro salvo: " + localizacao);
33 | }
34 | }
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/LivrosClient.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client;
2 |
3 | import java.net.URI;
4 | import java.util.Arrays;
5 | import java.util.List;
6 |
7 | import org.springframework.http.RequestEntity;
8 | import org.springframework.http.ResponseEntity;
9 | import org.springframework.web.client.RestTemplate;
10 |
11 | import com.algaworks.socialbooks.client.domain.Livro;
12 |
13 | public class LivrosClient {
14 |
15 | public List listar() {
16 | RestTemplate restTemplate = new RestTemplate();
17 |
18 | RequestEntity request = RequestEntity
19 | .get(URI.create("http://localhost:8080/livros"))
20 | .header("Authorization", "Basic YWxnYXdvcmtzOnMzbmg0").build();
21 |
22 | ResponseEntity response = restTemplate.exchange(request, Livro[].class);
23 |
24 | return Arrays.asList(response.getBody());
25 | }
26 |
27 | public String salvar(Livro livro) {
28 | RestTemplate restTemplate = new RestTemplate();
29 |
30 | RequestEntity request = RequestEntity
31 | .post(URI.create("http://localhost:8080/livros"))
32 | .header("Authorization", "Basic YWxnYXdvcmtzOnMzbmg0")
33 | .body(livro);
34 |
35 | ResponseEntity response = restTemplate.exchange(request, Void.class);
36 |
37 | return response.getHeaders().getLocation().toString();
38 | }
39 | }
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Autor {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date nascimento;
16 |
17 | private String nacionalidade;
18 |
19 | private List livros;
20 |
21 | public Long getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Long id) {
26 | this.id = id;
27 | }
28 |
29 | public String getNome() {
30 | return nome;
31 | }
32 |
33 | public void setNome(String nome) {
34 | this.nome = nome;
35 | }
36 |
37 | public Date getNascimento() {
38 | return nascimento;
39 | }
40 |
41 | public void setNascimento(Date nascimento) {
42 | this.nascimento = nascimento;
43 | }
44 |
45 | public String getNacionalidade() {
46 | return nacionalidade;
47 | }
48 |
49 | public void setNacionalidade(String nacionalidade) {
50 | this.nacionalidade = nacionalidade;
51 | }
52 |
53 | public List getLivros() {
54 | return livros;
55 | }
56 |
57 | public void setLivros(List livros) {
58 | this.livros = livros;
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 |
5 | import com.fasterxml.jackson.annotation.JsonFormat;
6 | import com.fasterxml.jackson.annotation.JsonProperty;
7 |
8 | public class Comentario {
9 |
10 | private Long id;
11 |
12 | @JsonProperty("comentario")
13 | private String texto;
14 |
15 | private String usuario;
16 |
17 | @JsonFormat(pattern = "dd/MM/yyyy")
18 | private Date data;
19 |
20 | private Livro livro;
21 |
22 | public Long getId() {
23 | return id;
24 | }
25 |
26 | public void setId(Long id) {
27 | this.id = id;
28 | }
29 |
30 | public String getTexto() {
31 | return texto;
32 | }
33 |
34 | public void setTexto(String texto) {
35 | this.texto = texto;
36 | }
37 |
38 | public String getUsuario() {
39 | return usuario;
40 | }
41 |
42 | public void setUsuario(String usuario) {
43 | this.usuario = usuario;
44 | }
45 |
46 | public Date getData() {
47 | return data;
48 | }
49 |
50 | public void setData(Date data) {
51 | this.data = data;
52 | }
53 |
54 | public Livro getLivro() {
55 | return livro;
56 | }
57 |
58 | public void setLivro(Livro livro) {
59 | this.livro = livro;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Evoluindo nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/Livro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Livro {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date publicacao;
16 |
17 | private String editora;
18 |
19 | private String resumo;
20 |
21 | private List comentarios;
22 |
23 | private Autor autor;
24 |
25 | public Livro() {}
26 |
27 | public Livro(String nome) {
28 | this.nome = nome;
29 | }
30 |
31 | public Long getId() {
32 | return id;
33 | }
34 |
35 | public void setId(Long id) {
36 | this.id = id;
37 | }
38 |
39 | public String getNome() {
40 | return nome;
41 | }
42 |
43 | public void setNome(String nome) {
44 | this.nome = nome;
45 | }
46 |
47 | public Date getPublicacao() {
48 | return publicacao;
49 | }
50 |
51 | public void setPublicacao(Date publicacao) {
52 | this.publicacao = publicacao;
53 | }
54 |
55 | public String getEditora() {
56 | return editora;
57 | }
58 |
59 | public void setEditora(String editora) {
60 | this.editora = editora;
61 | }
62 |
63 | public String getResumo() {
64 | return resumo;
65 | }
66 |
67 | public void setResumo(String resumo) {
68 | this.resumo = resumo;
69 | }
70 |
71 | public List getComentarios() {
72 | return comentarios;
73 | }
74 |
75 | public void setComentarios(List comentarios) {
76 | this.comentarios = comentarios;
77 | }
78 |
79 | public Autor getAutor() {
80 | return autor;
81 | }
82 |
83 | public void setAutor(Autor autor) {
84 | this.autor = autor;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/domain/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import javax.persistence.Entity;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.OneToMany;
11 |
12 | import com.fasterxml.jackson.annotation.JsonIgnore;
13 |
14 | @Entity
15 | public class Autor {
16 |
17 | @Id
18 | @GeneratedValue(strategy = GenerationType.IDENTITY)
19 | private Long id;
20 |
21 | private String nome;
22 |
23 | private Date nascimento;
24 |
25 | private String nacionalidade;
26 |
27 | @OneToMany(mappedBy = "autor")
28 | @JsonIgnore
29 | private List livros;
30 |
31 | public Long getId() {
32 | return id;
33 | }
34 |
35 | public void setId(Long id) {
36 | this.id = id;
37 | }
38 |
39 | public String getNome() {
40 | return nome;
41 | }
42 |
43 | public void setNome(String nome) {
44 | this.nome = nome;
45 | }
46 |
47 | public Date getNascimento() {
48 | return nascimento;
49 | }
50 |
51 | public void setNascimento(Date nascimento) {
52 | this.nascimento = nascimento;
53 | }
54 |
55 | public String getNacionalidade() {
56 | return nacionalidade;
57 | }
58 |
59 | public void setNacionalidade(String nacionalidade) {
60 | this.nacionalidade = nacionalidade;
61 | }
62 |
63 | public List getLivros() {
64 | return livros;
65 | }
66 |
67 | public void setLivros(List livros) {
68 | this.livros = livros;
69 | }
70 |
71 | }
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.FetchType;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.JoinColumn;
11 | import javax.persistence.ManyToOne;
12 |
13 | import com.fasterxml.jackson.annotation.JsonIgnore;
14 |
15 | @Entity
16 | public class Comentario {
17 |
18 | @Id
19 | @GeneratedValue(strategy = GenerationType.IDENTITY)
20 | private Long id;
21 |
22 | private String texto;
23 |
24 | private String usuario;
25 |
26 | private Date data;
27 |
28 | @ManyToOne(fetch = FetchType.LAZY)
29 | @JoinColumn(name = "LIVRO_ID")
30 | @JsonIgnore
31 | private Livro livro;
32 |
33 | public Long getId() {
34 | return id;
35 | }
36 |
37 | public void setId(Long id) {
38 | this.id = id;
39 | }
40 |
41 | public String getTexto() {
42 | return texto;
43 | }
44 |
45 | public void setTexto(String texto) {
46 | this.texto = texto;
47 | }
48 |
49 | public String getUsuario() {
50 | return usuario;
51 | }
52 |
53 | public void setUsuario(String usuario) {
54 | this.usuario = usuario;
55 | }
56 |
57 | public Date getData() {
58 | return data;
59 | }
60 |
61 | public void setData(Date data) {
62 | this.data = data;
63 | }
64 |
65 | public Livro getLivro() {
66 | return livro;
67 | }
68 |
69 | public void setLivro(Livro livro) {
70 | this.livro = livro;
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/resources/AutoresResource.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.net.URI;
4 | import java.util.List;
5 |
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.http.HttpStatus;
8 | import org.springframework.http.ResponseEntity;
9 | import org.springframework.web.bind.annotation.PathVariable;
10 | import org.springframework.web.bind.annotation.RequestBody;
11 | import org.springframework.web.bind.annotation.RequestMapping;
12 | import org.springframework.web.bind.annotation.RequestMethod;
13 | import org.springframework.web.bind.annotation.RestController;
14 | import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
15 |
16 | import com.algaworks.socialbooks.domain.Autor;
17 | import com.algaworks.socialbooks.services.AutoresService;
18 |
19 | @RestController
20 | @RequestMapping("/autores")
21 | public class AutoresResource {
22 |
23 | @Autowired
24 | private AutoresService autoresService;
25 |
26 | @RequestMapping(method = RequestMethod.GET)
27 | public ResponseEntity> listar() {
28 | List autores = autoresService.listar();
29 | return ResponseEntity.status(HttpStatus.OK).body(autores);
30 | }
31 |
32 | @RequestMapping(method = RequestMethod.POST)
33 | public ResponseEntity salvar(@RequestBody Autor autor) {
34 | autor = autoresService.salvar(autor);
35 |
36 | URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
37 | .path("/{id}").buildAndExpand(autor.getId()).toUri();
38 |
39 | return ResponseEntity.created(uri).build();
40 | }
41 |
42 | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
43 | public ResponseEntity buscar(@PathVariable("id") Long id) {
44 | Autor autor = autoresService.buscar(id);
45 | return ResponseEntity.status(HttpStatus.OK).body(autor);
46 | }
47 | }
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Evoluindo nosso recurso Autor/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Evoluindo nosso recurso Autor/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Finalizando nosso cliente Java/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | com.algaworks.socialbooks
4 | socialbooksapi-client
5 | 1.0.0-SNAPSHOT
6 |
7 |
8 | 1.8
9 |
10 |
11 |
12 |
13 | org.springframework
14 | spring-web
15 | 4.2.5.RELEASE
16 |
17 |
18 | com.fasterxml.jackson.core
19 | jackson-databind
20 | 2.7.2
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Finalizando nosso cliente Java/src/main/java/com/algaworks/socialbooks/aplicacao/Aplicacao.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.aplicacao;
2 |
3 | import java.text.ParseException;
4 | import java.text.SimpleDateFormat;
5 | import java.util.List;
6 |
7 | import com.algaworks.socialbooks.client.LivrosClient;
8 | import com.algaworks.socialbooks.client.domain.Livro;
9 |
10 | public class Aplicacao {
11 |
12 | public static void main(String[] args) throws ParseException {
13 | LivrosClient cliente =
14 | new LivrosClient("http://localhost:8080", "algaworks", "s3nh4");
15 |
16 | List listaLivros = cliente.listar();
17 |
18 | for(Livro livro : listaLivros) {
19 | System.out.println("Livro: " + livro.getNome());
20 | }
21 |
22 | Livro livro = new Livro();
23 | livro.setNome("Git passo-a-passo");
24 | livro.setEditora("AlgaWorks");
25 |
26 | SimpleDateFormat publicacao = new SimpleDateFormat("dd/MM/yyyy");
27 | livro.setPublicacao(publicacao.parse("01/01/2016"));
28 |
29 | livro.setResumo("este livro aborda tecnicas de desenvolvimento de APIs.");
30 |
31 | String localizacao = cliente.salvar(livro);
32 |
33 | System.out.println("URI do livro salvo: " + localizacao);
34 |
35 | Livro livroBuscado = cliente.buscar(localizacao);
36 |
37 | System.out.println("Livro buscado: " + livroBuscado.getNome());
38 | }
39 | }
--------------------------------------------------------------------------------
/Finalizando nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Autor {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date nascimento;
16 |
17 | private String nacionalidade;
18 |
19 | private List livros;
20 |
21 | public Long getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Long id) {
26 | this.id = id;
27 | }
28 |
29 | public String getNome() {
30 | return nome;
31 | }
32 |
33 | public void setNome(String nome) {
34 | this.nome = nome;
35 | }
36 |
37 | public Date getNascimento() {
38 | return nascimento;
39 | }
40 |
41 | public void setNascimento(Date nascimento) {
42 | this.nascimento = nascimento;
43 | }
44 |
45 | public String getNacionalidade() {
46 | return nacionalidade;
47 | }
48 |
49 | public void setNacionalidade(String nacionalidade) {
50 | this.nacionalidade = nacionalidade;
51 | }
52 |
53 | public List getLivros() {
54 | return livros;
55 | }
56 |
57 | public void setLivros(List livros) {
58 | this.livros = livros;
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/Finalizando nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 |
5 | import com.fasterxml.jackson.annotation.JsonFormat;
6 | import com.fasterxml.jackson.annotation.JsonProperty;
7 |
8 | public class Comentario {
9 |
10 | private Long id;
11 |
12 | @JsonProperty("comentario")
13 | private String texto;
14 |
15 | private String usuario;
16 |
17 | @JsonFormat(pattern = "dd/MM/yyyy")
18 | private Date data;
19 |
20 | private Livro livro;
21 |
22 | public Long getId() {
23 | return id;
24 | }
25 |
26 | public void setId(Long id) {
27 | this.id = id;
28 | }
29 |
30 | public String getTexto() {
31 | return texto;
32 | }
33 |
34 | public void setTexto(String texto) {
35 | this.texto = texto;
36 | }
37 |
38 | public String getUsuario() {
39 | return usuario;
40 | }
41 |
42 | public void setUsuario(String usuario) {
43 | this.usuario = usuario;
44 | }
45 |
46 | public Date getData() {
47 | return data;
48 | }
49 |
50 | public void setData(Date data) {
51 | this.data = data;
52 | }
53 |
54 | public Livro getLivro() {
55 | return livro;
56 | }
57 |
58 | public void setLivro(Livro livro) {
59 | this.livro = livro;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/Finalizando nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Finalizando nosso cliente Java/src/main/java/com/algaworks/socialbooks/client/domain/Livro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.client.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonFormat;
7 |
8 | public class Livro {
9 |
10 | private Long id;
11 |
12 | private String nome;
13 |
14 | @JsonFormat(pattern = "dd/MM/yyyy")
15 | private Date publicacao;
16 |
17 | private String editora;
18 |
19 | private String resumo;
20 |
21 | private List comentarios;
22 |
23 | private Autor autor;
24 |
25 | public Livro() {}
26 |
27 | public Livro(String nome) {
28 | this.nome = nome;
29 | }
30 |
31 | public Long getId() {
32 | return id;
33 | }
34 |
35 | public void setId(Long id) {
36 | this.id = id;
37 | }
38 |
39 | public String getNome() {
40 | return nome;
41 | }
42 |
43 | public void setNome(String nome) {
44 | this.nome = nome;
45 | }
46 |
47 | public Date getPublicacao() {
48 | return publicacao;
49 | }
50 |
51 | public void setPublicacao(Date publicacao) {
52 | this.publicacao = publicacao;
53 | }
54 |
55 | public String getEditora() {
56 | return editora;
57 | }
58 |
59 | public void setEditora(String editora) {
60 | this.editora = editora;
61 | }
62 |
63 | public String getResumo() {
64 | return resumo;
65 | }
66 |
67 | public void setResumo(String resumo) {
68 | this.resumo = resumo;
69 | }
70 |
71 | public List getComentarios() {
72 | return comentarios;
73 | }
74 |
75 | public void setComentarios(List comentarios) {
76 | this.comentarios = comentarios;
77 | }
78 |
79 | public Autor getAutor() {
80 | return autor;
81 | }
82 |
83 | public void setAutor(Autor autor) {
84 | this.autor = autor;
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/Finalizando o tratamento das respostas/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Finalizando o tratamento das respostas/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Finalizando o tratamento das respostas/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Finalizando o tratamento das respostas/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Finalizando o tratamento das respostas/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Finalizando o tratamento das respostas/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Finalizando o tratamento das respostas/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RequestMethod;
8 | import org.springframework.web.bind.annotation.RestController;
9 |
10 | import com.algaworks.socialbooks.domain.Livro;
11 | import com.algaworks.socialbooks.repository.LivrosRepository;
12 |
13 | @RestController
14 | public class LivrosResources {
15 |
16 | @Autowired
17 | private LivrosRepository livrosRepository;
18 |
19 | @RequestMapping(value = "/livros", method = RequestMethod.GET)
20 | public List listar() {
21 | return livrosRepository.findAll();
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Interagindo com o banco de dados/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Interagindo com o banco de dados/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.FetchType;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.JoinColumn;
11 | import javax.persistence.ManyToOne;
12 |
13 | import com.fasterxml.jackson.annotation.JsonIgnore;
14 |
15 | @Entity
16 | public class Comentario {
17 |
18 | @Id
19 | @GeneratedValue(strategy = GenerationType.IDENTITY)
20 | private Long id;
21 |
22 | private String texto;
23 |
24 | private String usuario;
25 |
26 | private Date data;
27 |
28 | @ManyToOne(fetch = FetchType.LAZY)
29 | @JoinColumn(name = "LIVRO_ID")
30 | @JsonIgnore
31 | private Livro livro;
32 |
33 | public Long getId() {
34 | return id;
35 | }
36 |
37 | public void setId(Long id) {
38 | this.id = id;
39 | }
40 |
41 | public String getTexto() {
42 | return texto;
43 | }
44 |
45 | public void setTexto(String texto) {
46 | this.texto = texto;
47 | }
48 |
49 | public String getUsuario() {
50 | return usuario;
51 | }
52 |
53 | public void setUsuario(String usuario) {
54 | this.usuario = usuario;
55 | }
56 |
57 | public Date getData() {
58 | return data;
59 | }
60 |
61 | public void setData(Date data) {
62 | this.data = data;
63 | }
64 |
65 | public Livro getLivro() {
66 | return livro;
67 | }
68 |
69 | public void setLivro(Livro livro) {
70 | this.livro = livro;
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/handler/ResourceExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.handler;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | import org.springframework.http.HttpStatus;
6 | import org.springframework.http.ResponseEntity;
7 | import org.springframework.web.bind.annotation.ControllerAdvice;
8 | import org.springframework.web.bind.annotation.ExceptionHandler;
9 |
10 | import com.algaworks.socialbooks.domain.DetalhesErro;
11 | import com.algaworks.socialbooks.services.exceptions.LivroNaoEncontradoException;
12 |
13 | @ControllerAdvice
14 | public class ResourceExceptionHandler {
15 |
16 | @ExceptionHandler(LivroNaoEncontradoException.class)
17 | public ResponseEntity handleLivroNaoEncontradoException
18 | (LivroNaoEncontradoException e, HttpServletRequest request) {
19 |
20 | DetalhesErro erro = new DetalhesErro();
21 | erro.setStatus(404l);
22 | erro.setTitulo("O livro não pôde ser encontrado");
23 | erro.setMensagemDesenvolvedor("http://erros.socialbooks.com/404");
24 | erro.setTimestamp(System.currentTimeMillis());
25 |
26 | return ResponseEntity.status(HttpStatus.NOT_FOUND).body(erro);
27 | }
28 | }
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Listando os comentários do recurso Livro /src/main/resources/application.properties
--------------------------------------------------------------------------------
/Listando os comentários do recurso Livro /src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/handler/ResourceExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.handler;
2 |
3 | import javax.servlet.http.HttpServletRequest;
4 |
5 | import org.springframework.http.HttpStatus;
6 | import org.springframework.http.ResponseEntity;
7 | import org.springframework.web.bind.annotation.ControllerAdvice;
8 | import org.springframework.web.bind.annotation.ExceptionHandler;
9 |
10 | import com.algaworks.socialbooks.domain.DetalhesErro;
11 | import com.algaworks.socialbooks.services.exceptions.LivroNaoEncontradoException;
12 |
13 | @ControllerAdvice
14 | public class ResourceExceptionHandler {
15 |
16 | @ExceptionHandler(LivroNaoEncontradoException.class)
17 | public ResponseEntity handleLivroNaoEncontradoException
18 | (LivroNaoEncontradoException e, HttpServletRequest request) {
19 |
20 | DetalhesErro erro = new DetalhesErro();
21 | erro.setStatus(404l);
22 | erro.setTitulo("O livro não pôde ser encontrado");
23 | erro.setMensagemDesenvolvedor("http://erros.socialbooks.com/404");
24 | erro.setTimestamp(System.currentTimeMillis());
25 |
26 | return ResponseEntity.status(HttpStatus.NOT_FOUND).body(erro);
27 | }
28 | }
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/services/LivrosService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.dao.EmptyResultDataAccessException;
7 | import org.springframework.stereotype.Service;
8 |
9 | import com.algaworks.socialbooks.domain.Livro;
10 | import com.algaworks.socialbooks.repository.LivrosRepository;
11 | import com.algaworks.socialbooks.services.exceptions.LivroNaoEncontradoException;
12 |
13 | @Service
14 | public class LivrosService {
15 |
16 | @Autowired
17 | private LivrosRepository livrosRepository;
18 |
19 | public List listar() {
20 | return livrosRepository.findAll();
21 | }
22 |
23 | public Livro buscar(Long id) {
24 | Livro livro = livrosRepository.findOne(id);
25 |
26 | if(livro == null) {
27 | throw new LivroNaoEncontradoException("O livro não pôde ser encontrado.");
28 | }
29 |
30 | return livro;
31 | }
32 |
33 | public Livro salvar(Livro livro) {
34 | livro.setId(null);
35 | return livrosRepository.save(livro);
36 | }
37 |
38 | public void deletar(Long id) {
39 | try {
40 | livrosRepository.delete(id);
41 | } catch (EmptyResultDataAccessException e) {
42 | throw new LivroNaoEncontradoException("O livro não pôde ser encontrado.");
43 | }
44 | }
45 |
46 | public void atualizar(Livro livro) {
47 | verificarExistencia(livro);
48 | livrosRepository.save(livro);
49 | }
50 |
51 | private void verificarExistencia(Livro livro) {
52 | buscar(livro.getId());
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Manipulando erros com @ExceptionHandler e @ControllerAdvice/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/main/java/com/algaworks/socialbooks/services/LivrosService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.dao.EmptyResultDataAccessException;
7 | import org.springframework.stereotype.Service;
8 |
9 | import com.algaworks.socialbooks.domain.Livro;
10 | import com.algaworks.socialbooks.repository.LivrosRepository;
11 | import com.algaworks.socialbooks.services.exceptions.LivroNaoEncontradoException;
12 |
13 | @Service
14 | public class LivrosService {
15 |
16 | @Autowired
17 | private LivrosRepository livrosRepository;
18 |
19 | public List listar() {
20 | return livrosRepository.findAll();
21 | }
22 |
23 | public Livro buscar(Long id) {
24 | Livro livro = livrosRepository.findOne(id);
25 |
26 | if(livro == null) {
27 | throw new LivroNaoEncontradoException("O livro não pôde ser encontrado.");
28 | }
29 |
30 | return livro;
31 | }
32 |
33 | public Livro salvar(Livro livro) {
34 | livro.setId(null);
35 | return livrosRepository.save(livro);
36 | }
37 |
38 | public void deletar(Long id) {
39 | try {
40 | livrosRepository.delete(id);
41 | } catch (EmptyResultDataAccessException e) {
42 | throw new LivroNaoEncontradoException("O livro não pôde ser encontrado.");
43 | }
44 | }
45 |
46 | public void atualizar(Livro livro) {
47 | verificarExistencia(livro);
48 | livrosRepository.save(livro);
49 | }
50 |
51 | private void verificarExistencia(Livro livro) {
52 | buscar(livro.getId());
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Melhorando o design do nosso código/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Melhorando o design do nosso código/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Modelando nosso primeiro recurso/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-test
35 | test
36 |
37 |
38 |
39 |
40 |
41 |
42 | org.springframework.boot
43 | spring-boot-maven-plugin
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Modelando nosso primeiro recurso/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Modelando nosso primeiro recurso/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import org.springframework.web.bind.annotation.RequestMapping;
4 | import org.springframework.web.bind.annotation.RequestMethod;
5 | import org.springframework.web.bind.annotation.RestController;
6 |
7 | @RestController
8 | public class LivrosResources {
9 |
10 | @RequestMapping(value = "/livros", method = RequestMethod.GET)
11 | public String listar() {
12 | return "Rest aplicado, Git passo-a-passo";
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/Modelando nosso primeiro recurso/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Modelando nosso primeiro recurso/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Modelando nosso primeiro recurso/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Negociação de conteúdos com Media Type/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Negociação de conteúdos com Media Type/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.PathVariable;
7 | import org.springframework.web.bind.annotation.RequestBody;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RequestMethod;
10 | import org.springframework.web.bind.annotation.RestController;
11 |
12 | import com.algaworks.socialbooks.domain.Livro;
13 | import com.algaworks.socialbooks.repository.LivrosRepository;
14 |
15 | @RestController
16 | @RequestMapping("/livros")
17 | public class LivrosResources {
18 |
19 | @Autowired
20 | private LivrosRepository livrosRepository;
21 |
22 | @RequestMapping(method = RequestMethod.GET)
23 | public List listar() {
24 | return livrosRepository.findAll();
25 | }
26 |
27 | @RequestMapping(method = RequestMethod.POST)
28 | public void salvar(@RequestBody Livro livro) {
29 | livrosRepository.save(livro);
30 | }
31 |
32 | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
33 | public Livro buscar(@PathVariable("id") Long id) {
34 | return livrosRepository.findOne(id);
35 | }
36 |
37 | @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
38 | public void deletar(@PathVariable("id") Long id) {
39 | livrosRepository.delete(id);
40 | }
41 |
42 | @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
43 | public void atualizar(@RequestBody Livro livro, @PathVariable("id") Long id) {
44 | livro.setId(id);
45 | livrosRepository.save(livro);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/PUT para atualizar o recurso Livro/src/main/resources/application.properties
--------------------------------------------------------------------------------
/PUT para atualizar o recurso Livro/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.RequestBody;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestMethod;
9 | import org.springframework.web.bind.annotation.RestController;
10 |
11 | import com.algaworks.socialbooks.domain.Livro;
12 | import com.algaworks.socialbooks.repository.LivrosRepository;
13 |
14 | @RestController
15 | @RequestMapping("/livros")
16 | public class LivrosResources {
17 |
18 | @Autowired
19 | private LivrosRepository livrosRepository;
20 |
21 | @RequestMapping(method = RequestMethod.GET)
22 | public List listar() {
23 | return livrosRepository.findAll();
24 | }
25 |
26 | @RequestMapping(method = RequestMethod.POST)
27 | public void salvar(@RequestBody Livro livro) {
28 | livrosRepository.save(livro);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Salvando o recurso Livro a partir de um POST/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Salvando o recurso Livro a partir de um POST/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/domain/Autor.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import javax.persistence.Entity;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.OneToMany;
11 |
12 | import com.fasterxml.jackson.annotation.JsonFormat;
13 | import com.fasterxml.jackson.annotation.JsonIgnore;
14 | import com.fasterxml.jackson.annotation.JsonInclude;
15 | import com.fasterxml.jackson.annotation.JsonInclude.Include;
16 |
17 | @Entity
18 | public class Autor {
19 |
20 | @Id
21 | @GeneratedValue(strategy = GenerationType.IDENTITY)
22 | private Long id;
23 |
24 | private String nome;
25 |
26 | @JsonFormat(pattern = "dd/MM/yyyy")
27 | @JsonInclude(Include.NON_NULL)
28 | private Date nascimento;
29 |
30 | @JsonInclude(Include.NON_NULL)
31 | private String nacionalidade;
32 |
33 | @OneToMany(mappedBy = "autor")
34 | @JsonIgnore
35 | private List livros;
36 |
37 | public Long getId() {
38 | return id;
39 | }
40 |
41 | public void setId(Long id) {
42 | this.id = id;
43 | }
44 |
45 | public String getNome() {
46 | return nome;
47 | }
48 |
49 | public void setNome(String nome) {
50 | this.nome = nome;
51 | }
52 |
53 | public Date getNascimento() {
54 | return nascimento;
55 | }
56 |
57 | public void setNascimento(Date nascimento) {
58 | this.nascimento = nascimento;
59 | }
60 |
61 | public String getNacionalidade() {
62 | return nacionalidade;
63 | }
64 |
65 | public void setNacionalidade(String nacionalidade) {
66 | this.nacionalidade = nacionalidade;
67 | }
68 |
69 | public List getLivros() {
70 | return livros;
71 | }
72 |
73 | public void setLivros(List livros) {
74 | this.livros = livros;
75 | }
76 |
77 | }
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | import javax.persistence.Entity;
6 | import javax.persistence.FetchType;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.JoinColumn;
11 | import javax.persistence.ManyToOne;
12 |
13 | import com.fasterxml.jackson.annotation.JsonFormat;
14 | import com.fasterxml.jackson.annotation.JsonIgnore;
15 | import com.fasterxml.jackson.annotation.JsonInclude;
16 | import com.fasterxml.jackson.annotation.JsonInclude.Include;
17 |
18 | @Entity
19 | public class Comentario {
20 |
21 | @Id
22 | @GeneratedValue(strategy = GenerationType.IDENTITY)
23 | private Long id;
24 |
25 | private String texto;
26 |
27 | @JsonInclude(Include.NON_NULL)
28 | private String usuario;
29 |
30 | @JsonFormat(pattern = "dd/MM/yyyy")
31 | @JsonInclude(Include.NON_NULL)
32 | private Date data;
33 |
34 | @ManyToOne(fetch = FetchType.LAZY)
35 | @JoinColumn(name = "LIVRO_ID")
36 | @JsonIgnore
37 | private Livro livro;
38 |
39 | public Long getId() {
40 | return id;
41 | }
42 |
43 | public void setId(Long id) {
44 | this.id = id;
45 | }
46 |
47 | public String getTexto() {
48 | return texto;
49 | }
50 |
51 | public void setTexto(String texto) {
52 | this.texto = texto;
53 | }
54 |
55 | public String getUsuario() {
56 | return usuario;
57 | }
58 |
59 | public void setUsuario(String usuario) {
60 | this.usuario = usuario;
61 | }
62 |
63 | public Date getData() {
64 | return data;
65 | }
66 |
67 | public void setData(Date data) {
68 | this.data = data;
69 | }
70 |
71 | public Livro getLivro() {
72 | return livro;
73 | }
74 |
75 | public void setLivro(Livro livro) {
76 | this.livro = livro;
77 | }
78 |
79 | }
80 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/resources/AutoresResource.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.net.URI;
4 | import java.util.List;
5 |
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.http.HttpStatus;
8 | import org.springframework.http.ResponseEntity;
9 | import org.springframework.web.bind.annotation.PathVariable;
10 | import org.springframework.web.bind.annotation.RequestBody;
11 | import org.springframework.web.bind.annotation.RequestMapping;
12 | import org.springframework.web.bind.annotation.RequestMethod;
13 | import org.springframework.web.bind.annotation.RestController;
14 | import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
15 |
16 | import com.algaworks.socialbooks.domain.Autor;
17 | import com.algaworks.socialbooks.services.AutoresService;
18 |
19 | @RestController
20 | @RequestMapping("/autores")
21 | public class AutoresResource {
22 |
23 | @Autowired
24 | private AutoresService autoresService;
25 |
26 | @RequestMapping(method = RequestMethod.GET)
27 | public ResponseEntity> listar() {
28 | List autores = autoresService.listar();
29 | return ResponseEntity.status(HttpStatus.OK).body(autores);
30 | }
31 |
32 | @RequestMapping(method = RequestMethod.POST)
33 | public ResponseEntity salvar(@RequestBody Autor autor) {
34 | autor = autoresService.salvar(autor);
35 |
36 | URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
37 | .path("/{id}").buildAndExpand(autor.getId()).toUri();
38 |
39 | return ResponseEntity.created(uri).build();
40 | }
41 |
42 | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
43 | public ResponseEntity buscar(@PathVariable("id") Long id) {
44 | Autor autor = autoresService.buscar(id);
45 | return ResponseEntity.status(HttpStatus.OK).body(autor);
46 | }
47 | }
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Testando nossos recursos e formatando nossas representações JSON/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Testando nossos recursos e formatando nossas representações JSON/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Tratamento correto das respostas HTTP 404 e 201/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Tratamento correto das respostas HTTP 404 e 201/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Tratamento correto das respostas HTTP 404 e 201/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Tratamento correto das respostas HTTP 404 e 201/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Tratamento correto das respostas HTTP 404 e 201/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Tratamento correto das respostas HTTP 404 e 201/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-test
35 | test
36 |
37 |
38 |
39 |
40 |
41 |
42 | org.springframework.boot
43 | spring-boot-maven-plugin
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/src/main/java/com/algaworks/socialbooks/domain/Comentario.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 |
5 | public class Comentario {
6 |
7 | private Long id;
8 |
9 | private String texto;
10 |
11 | private String usuario;
12 |
13 | private Date data;
14 |
15 | public Long getId() {
16 | return id;
17 | }
18 |
19 | public void setId(Long id) {
20 | this.id = id;
21 | }
22 |
23 | public String getTexto() {
24 | return texto;
25 | }
26 |
27 | public void setTexto(String texto) {
28 | this.texto = texto;
29 | }
30 |
31 | public String getUsuario() {
32 | return usuario;
33 | }
34 |
35 | public void setUsuario(String usuario) {
36 | this.usuario = usuario;
37 | }
38 |
39 | public Date getData() {
40 | return data;
41 | }
42 |
43 | public void setData(Date data) {
44 | this.data = data;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/src/main/java/com/algaworks/socialbooks/domain/Livro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | import java.util.Date;
4 | import java.util.List;
5 |
6 | import com.fasterxml.jackson.annotation.JsonInclude;
7 | import com.fasterxml.jackson.annotation.JsonInclude.Include;
8 |
9 | public class Livro {
10 |
11 | @JsonInclude(Include.NON_NULL)
12 | private Long id;
13 |
14 | private String nome;
15 |
16 | @JsonInclude(Include.NON_NULL)
17 | private Date publicacao;
18 |
19 | @JsonInclude(Include.NON_NULL)
20 | private String editora;
21 |
22 | @JsonInclude(Include.NON_NULL)
23 | private String resumo;
24 |
25 | @JsonInclude(Include.NON_NULL)
26 | private List comentarios;
27 |
28 | @JsonInclude(Include.NON_NULL)
29 | private String autor;
30 |
31 | public Livro() {}
32 |
33 | public Livro(String nome) {
34 | this.nome = nome;
35 | }
36 |
37 | public Long getId() {
38 | return id;
39 | }
40 |
41 | public void setId(Long id) {
42 | this.id = id;
43 | }
44 |
45 | public String getNome() {
46 | return nome;
47 | }
48 |
49 | public void setNome(String nome) {
50 | this.nome = nome;
51 | }
52 |
53 | public Date getPublicacao() {
54 | return publicacao;
55 | }
56 |
57 | public void setPublicacao(Date publicacao) {
58 | this.publicacao = publicacao;
59 | }
60 |
61 | public String getEditora() {
62 | return editora;
63 | }
64 |
65 | public void setEditora(String editora) {
66 | this.editora = editora;
67 | }
68 |
69 | public String getResumo() {
70 | return resumo;
71 | }
72 |
73 | public void setResumo(String resumo) {
74 | this.resumo = resumo;
75 | }
76 |
77 | public List getComentarios() {
78 | return comentarios;
79 | }
80 |
81 | public void setComentarios(List comentarios) {
82 | this.comentarios = comentarios;
83 | }
84 |
85 | public String getAutor() {
86 | return autor;
87 | }
88 |
89 | public void setAutor(String autor) {
90 | this.autor = autor;
91 | }
92 |
93 | }
94 |
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/src/main/java/com/algaworks/socialbooks/resources/LivrosResources.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.util.Arrays;
4 | import java.util.List;
5 |
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RequestMethod;
8 | import org.springframework.web.bind.annotation.RestController;
9 |
10 | import com.algaworks.socialbooks.domain.Livro;
11 |
12 | @RestController
13 | public class LivrosResources {
14 |
15 | @RequestMapping(value = "/livros", method = RequestMethod.GET)
16 | public List listar() {
17 |
18 | Livro l1 = new Livro("Rest Aplicado");
19 | Livro l2 = new Livro("Git passo-a-passo");
20 |
21 | Livro[] livros = {l1, l2};
22 |
23 | return Arrays.asList(livros);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Utilizando a anotação @JsonInclude/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Utilizando a anotação @JsonInclude/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | com.algaworks.socialbooks
7 | socialbooks
8 | 1.0.0-SNAPSHOT
9 | jar
10 |
11 | socialbooksapi
12 | API Social para Livros
13 |
14 |
15 | org.springframework.boot
16 | spring-boot-starter-parent
17 | 1.3.3.RELEASE
18 |
19 |
20 |
21 |
22 | UTF-8
23 | 1.8
24 |
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-web
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-starter-test
34 | test
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-data-jpa
39 |
40 |
41 | com.h2database
42 | h2
43 | runtime
44 |
45 |
46 | org.springframework.boot
47 | spring-boot-devtools
48 |
49 |
50 |
51 |
52 |
53 |
54 | org.springframework.boot
55 | spring-boot-maven-plugin
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/SocialbooksApplication.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class SocialbooksApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(SocialbooksApplication.class, args);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/domain/DetalhesErro.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.domain;
2 |
3 | public class DetalhesErro {
4 |
5 | private String titulo;
6 |
7 | private Long status;
8 |
9 | private Long timestamp;
10 |
11 | private String mensagemDesenvolvedor;
12 |
13 | public String getTitulo() {
14 | return titulo;
15 | }
16 |
17 | public void setTitulo(String titulo) {
18 | this.titulo = titulo;
19 | }
20 |
21 | public Long getStatus() {
22 | return status;
23 | }
24 |
25 | public void setStatus(Long status) {
26 | this.status = status;
27 | }
28 |
29 | public Long getTimestamp() {
30 | return timestamp;
31 | }
32 |
33 | public void setTimestamp(Long timestamp) {
34 | this.timestamp = timestamp;
35 | }
36 |
37 | public String getMensagemDesenvolvedor() {
38 | return mensagemDesenvolvedor;
39 | }
40 |
41 | public void setMensagemDesenvolvedor(String mensagemDesenvolvedor) {
42 | this.mensagemDesenvolvedor = mensagemDesenvolvedor;
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/repository/AutoresRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Autor;
6 |
7 | public interface AutoresRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/repository/ComentariosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Comentario;
6 |
7 | public interface ComentariosRepository extends JpaRepository {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/repository/LivrosRepository.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.algaworks.socialbooks.domain.Livro;
6 |
7 | public interface LivrosRepository extends JpaRepository{
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/resources/AutoresResource.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.resources;
2 |
3 | import java.net.URI;
4 | import java.util.List;
5 |
6 | import javax.validation.Valid;
7 |
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.http.HttpStatus;
10 | import org.springframework.http.ResponseEntity;
11 | import org.springframework.web.bind.annotation.PathVariable;
12 | import org.springframework.web.bind.annotation.RequestBody;
13 | import org.springframework.web.bind.annotation.RequestMapping;
14 | import org.springframework.web.bind.annotation.RequestMethod;
15 | import org.springframework.web.bind.annotation.RestController;
16 | import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
17 |
18 | import com.algaworks.socialbooks.domain.Autor;
19 | import com.algaworks.socialbooks.services.AutoresService;
20 |
21 | @RestController
22 | @RequestMapping("/autores")
23 | public class AutoresResource {
24 |
25 | @Autowired
26 | private AutoresService autoresService;
27 |
28 | @RequestMapping(method = RequestMethod.GET)
29 | public ResponseEntity> listar() {
30 | List autores = autoresService.listar();
31 | return ResponseEntity.status(HttpStatus.OK).body(autores);
32 | }
33 |
34 | @RequestMapping(method = RequestMethod.POST)
35 | public ResponseEntity salvar(@Valid @RequestBody Autor autor) {
36 | autor = autoresService.salvar(autor);
37 |
38 | URI uri = ServletUriComponentsBuilder.fromCurrentRequest()
39 | .path("/{id}").buildAndExpand(autor.getId()).toUri();
40 |
41 | return ResponseEntity.created(uri).build();
42 | }
43 |
44 | @RequestMapping(value = "/{id}", method = RequestMethod.GET)
45 | public ResponseEntity buscar(@PathVariable("id") Long id) {
46 | Autor autor = autoresService.buscar(id);
47 | return ResponseEntity.status(HttpStatus.OK).body(autor);
48 | }
49 | }
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/services/AutoresService.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services;
2 |
3 | import java.util.List;
4 |
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import com.algaworks.socialbooks.domain.Autor;
9 | import com.algaworks.socialbooks.repository.AutoresRepository;
10 | import com.algaworks.socialbooks.services.exceptions.AutorExistenteException;
11 | import com.algaworks.socialbooks.services.exceptions.AutorNaoEncontradoException;
12 |
13 | @Service
14 | public class AutoresService {
15 |
16 | @Autowired
17 | private AutoresRepository autoresRepository;
18 |
19 | public List listar() {
20 | return autoresRepository.findAll();
21 | }
22 |
23 | public Autor salvar(Autor autor) {
24 | if(autor.getId() != null) {
25 | Autor a = autoresRepository.findOne(autor.getId());
26 |
27 | if(a != null) {
28 | throw new AutorExistenteException("O autor já existe.");
29 | }
30 | }
31 | return autoresRepository.save(autor);
32 | }
33 |
34 | public Autor buscar(Long id) {
35 | Autor autor = autoresRepository.findOne(id);
36 |
37 | if(autor == null) {
38 | throw new AutorNaoEncontradoException("O autor não pôde ser encontrado.");
39 | }
40 | return autor;
41 | }
42 | }
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorExistenteException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorExistenteException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorExistenteException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorExistenteException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/services/exceptions/AutorNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class AutorNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public AutorNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public AutorNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/java/com/algaworks/socialbooks/services/exceptions/LivroNaoEncontradoException.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks.services.exceptions;
2 |
3 | public class LivroNaoEncontradoException extends RuntimeException {
4 |
5 | /**
6 | *
7 | */
8 | private static final long serialVersionUID = 1869300553614629710L;
9 |
10 | public LivroNaoEncontradoException(String mensagem) {
11 | super(mensagem);
12 | }
13 |
14 | public LivroNaoEncontradoException(String mensagem, Throwable causa) {
15 | super(mensagem, causa);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/main/resources/application.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/algaworks/workshop-rest-spring/9704e833b76f4710c2b192c58442a376f24b7272/Validando as entradas na nossa API/src/main/resources/application.properties
--------------------------------------------------------------------------------
/Validando as entradas na nossa API/src/test/java/com/algaworks/socialbooks/SocialbooksApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.algaworks.socialbooks;
2 |
3 | import org.junit.Test;
4 | import org.junit.runner.RunWith;
5 | import org.springframework.test.context.web.WebAppConfiguration;
6 | import org.springframework.boot.test.SpringApplicationConfiguration;
7 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 |
9 | @RunWith(SpringJUnit4ClassRunner.class)
10 | @SpringApplicationConfiguration(classes = SocialbooksApplication.class)
11 | @WebAppConfiguration
12 | public class SocialbooksApplicationTests {
13 |
14 | @Test
15 | public void contextLoads() {
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------