Spring boot REST Update Delete

Vamos lá! Nesse post mostramos como fazer um insert via Rest. Vamos implementar os métodos update e delete em CaregoryResource.

Primeiramente vamos acrescentar os métodos update e delete no service

  package com.br.davifelipe.springjwt.services;
 import java.util.Optional;
 import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Service;
 import com.br.davifelipe.springjwt.model.Category;
  import com.br.davifelipe.springjwt.repositories.CategoryRepository;
  import com.br.davifelipe.springjwt.services.exceptions.ObjectNotFoundException;
 @Service
  public class CategoryService {
      
      @Autowired
      private CategoryRepository repo;
      
      /**
       * Find Category by id
       * @param Integer id of the object
       * @return object found or null if the object were not found
       * */
      public Category findById(Integer id) {
          Optional<Category> obj = this.repo.findById(id);
          return obj.orElse(null);
      }
      
      /**
       * Insert a new category
       * @param Category category to be inserted
       * @return Category object inserted 
       * */
      public Category insert(Category obj) {
          obj.setId(null);
          return this.repo.save(obj);
      }
      
      /**
       * Update a category object
       * @param Category category to be updated
       * @return Category object updated 
       * */
      public Category update(Category obj) {
          if(this.findById(obj.getId()) == null) {
              throw new ObjectNotFoundException("Obeject "+Category.class.getName()+" no found! ID "+obj.getId());
          }
          return this.repo.save(obj);
      }
      
      /**
       * Delete a category object by id
       * @param category id
       * */
      public void delete(Integer id) {
          if(this.findById(id) == null) {
              throw new ObjectNotFoundException("Obeject "+Category.class.getName()+" no found! ID "+id);
          }
          repo.deleteById(id);
      }
  }
  

Tanto no update como no delete, tenho que garantir que o registro existe na base de dados. Para isso, vamos aproveitar o método findById para verificar isso.

Agora vamos implementar os métodos para update pelo método PUT e delete pelo método DELETE

  package com.br.davifelipe.springjwt.resources;
 import java.net.URI;
 import org.modelmapper.ModelMapper;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.http.ResponseEntity;
  import org.springframework.web.bind.annotation.DeleteMapping;
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.PostMapping;
  import org.springframework.web.bind.annotation.PutMapping;
  import org.springframework.web.bind.annotation.RequestBody;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
 import com.br.davifelipe.springjwt.dto.CategoryDTO;
  import com.br.davifelipe.springjwt.model.Category;
  import com.br.davifelipe.springjwt.services.CategoryService;
  import com.br.davifelipe.springjwt.services.exceptions.ObjectNotFoundException;
 @RestController
  @RequestMapping("/category")
  public class CategoryResource {
      
      @Autowired
      private CategoryService service;
      
      @GetMapping("/{id}")
      public ResponseEntity<?> findById(@PathVariable(value="id") Integer id) {
          
          ModelMapper modelMapper = new ModelMapper();
          Category category = service.findById(id);
          
          if(category == null) {
              throw new ObjectNotFoundException("Object "+Category.class.getName()+" not found! id "+id);
          }
          
          CategoryDTO categoryDTO = modelMapper.map(category,CategoryDTO.class);
          return ResponseEntity.ok().body(categoryDTO);
      }
      
      @PostMapping()
      public ResponseEntity<Void> insert(@RequestBody CategoryDTO dto){
          
          ModelMapper modelMapper = new ModelMapper();
          Category obj = modelMapper.map(dto,Category.class);
          
          obj = this.service.insert(obj);
          URI uri = ServletUriComponentsBuilder
                    .fromCurrentRequest().path("/{id}")
                    .buildAndExpand(obj.getId())
                    .toUri();
          return ResponseEntity.created(uri).build();
      }
      
      @PutMapping("/{id}")
      public ResponseEntity<Void> update(@RequestBody CategoryDTO dto,
                                         @PathVariable(value="id") Integer id){
          
          ModelMapper modelMapper = new ModelMapper();
          Category obj = modelMapper.map(dto,Category.class);
          obj.setId(id);
          obj = this.service.update(obj);
          return ResponseEntity.noContent().build();
      }
      
      @DeleteMapping("/{id}")
      public ResponseEntity<Void> delete(@PathVariable(value="id") Integer id) {
          service.delete(id);
          return ResponseEntity.noContent().build();
      }
      
  }
  

Vamos subir a aplicação, inserir um registro pelo método insert e depois verificar se o update está funionando

Imagem

Chamar o endpoint find e verificar se o registro foi alterado.

Imagem

Agora vamos testar o delete

Imagem

E conferir se o registro foi excluído

Imagem

https://github.com/davifelipems/spring-backend-template/tree/crud

Comentários

 

Quem Sou

Graduado em ADS (Análise e desenvolvimento de sistemas).

Não sou "devoto" de nenhuma linguagem de programação. Procuro aproveitar o melhor de cada uma de acordo com a necessidade do projeto. Prezo por uma arquitetura bem feita, código limpo, puro e simples! 

anuncio atendente