@Transactional
public ProductDto insert (ProductDto productDto) {
//criando um Product para receber os dados do DTO
Product entity = new Product();
//salvando os dados do DTO no Product
entity.setName(productDto.getName());
entity.setDescription(productDto.getDescription());
entity.setPrice(productDto.getPrice());
entity.setImgUrl(productDto.getImgUrl());
//salvando entidade no banco de dados
entity = productRepository.save(entity);
//reconvertendo para DTO
return new ProductDto(entity);
}
No Controller
@PostMapping
public ProductDto insert(@RequestBody ProductDto productDto) {
return productService.insert(productDto);
}
Customizando resposta com ResponseEntity
No nosso Controller, ao invés de retornarmos só DTOS ou Pages, retornaremos também ResponseEntity, veja:
@GetMapping(value = "/{id}")
public ResponseEntity<ProductDto> findById(@PathVariable Long id) {
ProductDto dto = productService.findById(id);
return ResponseEntity.status(HttpStatus.OK).body(dto);
}
❗❗IMPORTANTE.
Em método de criação (insert) o ".CREATED", precisa receber uma URI como parametro, então fazemos dessa forma:
@PostMapping
public ResponseEntity<ProductDto> insert(@RequestBody ProductDto dto) {
dto = productService.insert(dto);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
.buildAndExpand(dto.getId()).toUri();
return ResponseEntity.created(uri).body(dto);
}
Desta maneira, ao realizar a inserção de dados no postman e consultar o item inserido, ele terá uma URI personalizada, veja: