Elementos mínimos para crear una API rest en Spring.
Más info en los siguientes enlaces:
Pruebas, código y proyecto
Main
package com.citaClientes;
import com.github.javafaker.Faker;
import com.citaClientes.models.Pie;
import com.citaClientes.repositories.PieRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class SpringBootRestExampleApplication {
private final Faker faker = new Faker();
public static void main(String[] args) {
SpringApplication.run(SpringBootRestExampleApplication.class, args);
}
@Bean
public CommandLineRunner initializeDb(PieRepository repository){
return (args) -> {
repository.deleteAll();
//Insert some random pies
for(int i = 0; i < 20; i++) {
repository.save(new Pie(faker.lorem().word(), faker.lorem().sentence()));
}
};
}
}
Controlador
package com.citaClientes.controllers;
import com.citaClientes.models.Pie;
import com.citaClientes.repositories.PieRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Collection;
@RestController
@RequestMapping("/pies")
public class PieRestController {
@Autowired
private PieRepository repository;
//Devuelve todos los elementos
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Collection<Pie>> getAllPies() {
return new ResponseEntity<>((Collection<Pie>) repository.findAll(), HttpStatus.OK);
}
//Devuelve un element por ID
@RequestMapping(method = RequestMethod.GET, value = "/{id}")
public ResponseEntity<Pie> getPieWithId(@PathVariable Long id) {
return new ResponseEntity<>(repository.findOne(id), HttpStatus.OK);
}
//Busca un elemento por el nombre, y lo devuelve
@RequestMapping(method = RequestMethod.GET, params = {"name"})
public ResponseEntity<Collection<Pie>> findPieWithName(@RequestParam(value = "name") String name) {
return new ResponseEntity<>(repository.findByName(name), HttpStatus.OK);
}
//Crea un elemento con los datos dados
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> addPie(@RequestBody Pie input) {
return new ResponseEntity<>(repository.save(input), HttpStatus.CREATED);
}
//Actualiza los datos de un elmento
@RequestMapping(method = RequestMethod.PUT, value = "/{id}")
public ResponseEntity<?> updatePie(@PathVariable Long id, @RequestBody Pie pie) {
if (repository.findOne(id) != null) {
//TO-DO
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
//Elimina un elmento
@RequestMapping(method = RequestMethod.DELETE, value = "/{id}")
public ResponseEntity<?> deletePie(@PathVariable Long id) {
if (repository.findOne(id) != null) {
repository.delete(id);
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
//Elimina todos los elementos
@RequestMapping(method = RequestMethod.DELETE)
public ResponseEntity<?> deleteAllPie() {
repository.deleteAll();
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}
Modelo - Objeto de ejemplo serializable
package com.citaClientes.models;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Pie implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String description;
public Pie(String name, String description) {
this.name = name;
this.description = description;
}
//for JPA
public Pie() {}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public void setName(String name) {
this.name = name;
}
public void setDescription(String description) {
this.description = description;
}
}
Interfaz para extender el ordenamiento de la lista por orden alfabético
package com.citaClientes.repositories;
import com.citaClientes.models.Pie;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface PieRepository extends CrudRepository<Pie, Long> {
List<Pie> findByName(String name);
public void findByName(Pie pie);
}
Repositorio