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




