Desenvolvendo uma aplicação Spring Data, REST e H2
Criando a aplicação
Acesse o site http://start.spring.io/ e configure uma aplicação conforme imagem abaixo.
Baixe e descompacte o arquivo (spring-rest-data-h2.zip) em algum diretório de trabalho.
Abra o Eclipse e importe o projeto (Maven Project).
Criação da classe controller
No Eclipse, clique em File / New / Java Class e defina-a conforme abaixo.
Código
package br.com.whs.springrestdatah2.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import br.com.whs.springrestdatah2.Model.User; import br.com.whs.springrestdatah2.repository.UserRepository; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserRepository userRepo; @RequestMapping(value = "/list", method = RequestMethod.GET) public List<User> findAll(){ return userRepo.findAll(); } @RequestMapping(value = "/find-by-id/{id}", method = RequestMethod.GET) public ResponseEntity<?> findById(@PathVariable final Long id){ User user = userRepo.findOne(id); if( user == null ){ String msg = "{\"message\":\"User with id " + id + " not found.\"}"; return new ResponseEntity<String>(msg,HttpStatus.NOT_FOUND); }else{ return new ResponseEntity<User>(user,HttpStatus.OK); } } @RequestMapping(value = "/find-by-login/{loginName}", method = RequestMethod.GET) public ResponseEntity<?> findByLoginName(@PathVariable final String loginName){ User user = userRepo.findByLoginName(loginName); if( user == null ){ String msg = "{\"message\":\"User with login " + loginName + " not found.\"}"; return new ResponseEntity<String>(msg,HttpStatus.NOT_FOUND); }else{ return new ResponseEntity<User>(user,HttpStatus.OK); } } @RequestMapping(value = "/create", method = RequestMethod.POST) public ResponseEntity<User> create(@RequestBody final User user){ userRepo.save(user); return new ResponseEntity<User>(userRepo.findByLoginName(user.getLoginName()),HttpStatus.OK); } @RequestMapping(value = "/update/{id}", method = RequestMethod.PUT) public ResponseEntity<?> update(@PathVariable("id") long id, @RequestBody User user) { User userData = userRepo.findOne(id); if (userData == null) { String msg = "{\"message\":\"User with id " + id + " not found.\"}"; return new ResponseEntity<String>(msg,HttpStatus.NOT_FOUND); } userData.setLoginName(user.getLoginName()); userData.setFullName(user.getFullName()); userData.setPassword(user.getPassword()); userRepo.save(userData); return new ResponseEntity<User>(userData, HttpStatus.OK); } @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE) public ResponseEntity<?> delete(@PathVariable("id") long id) { User user = userRepo.findOne(id); if (user == null) { String msg = "{\"message\":\"User with id " + id + " not found.\"}"; return new ResponseEntity<String>(msg,HttpStatus.NOT_FOUND); } userRepo.delete(id); return new ResponseEntity<User>(HttpStatus.NO_CONTENT); } }
Criando a interface UserRepository
Código
package br.com.whs.springrestdatah2.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Component; import br.com.whs.springrestdatah2.Model.User; @Component public interface UserRepository extends JpaRepository<User, Long>{ public User findByLoginName(String loginName); }
Criando a classe Model (User.java)
Código
package br.com.whs.springrestdatah2.Model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue private Long id; private String loginName; private String fullName; private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
Rodando a aplicação
Essa é uma aplicação Spring Boot, onde o framework baixará e utilizará os recursos necessários, conforme a configuração (definida na Criação da Aplicação). Neste caso, será utilizado Tomcat e banco de dados H2 (ambos embedded)
Procedimento
- Abra a classe SpringRestDataH2Application.java
- Clique no menu Run / Run as / Java Aplication
- Espere até que apareça “Tomcat started on port(s): 8080 (http)”
- Abra um navegador e forneça a url de listagem (http://localhost:8080/user/list)
- Deverá aparecer apenas 2 colchetes ([]), pois o List está vazio
Postman
Para facilitar as chamadas de POST (/user/create), PUT (/user/update) e DELETE (/user/delete), vou utilizar o Postman.
Método POST
Método PUT
Método DELETE
Código-Fonte (github)
https://github.com/lfchaim/spring-rest-data-h2