Explicação Alteração

  • Criamos uma Lista do tipo ProductModel e passamos o findAll dentro dela;

  • Fazemos um if para saber se ela está vazia, se não tiver:

    • Faremos um loop, criaremos uma variável ID e usaremos o product.add;

      • O .add é uma extensão do proprio RepresentationModel!

    • Dentro do add, usaremos linkTo, methodOn e withSelfRel.

linkTo - Fala pra qual endpoint/método vamos redirecionar o cliente quando ele clicar neste link.

methodOn - Qual controller está esse método? E qual é este método em sí que vai receber esse redirecionamento?

Bom, se o cliente está numa lista de produtos, vamos redirecionar ele para um produto específico, neste caso é o getOneProduct.

  1. Primeiro definimos qual Controller está esse método (ProductController.class);

  2. E depois qual o nome desse método. Usaremos o método de baixo getOneProduct; 3. Como esse método recebe um id, passamos o id que criamos em cima. (Id de cada um dos produtos iterado pelo for).

withSelfRel - Redireciona para cada um de seus produtos em sí.

ALTERAÇÃO GET ONE PRODUCT

@GetMapping("/products/{id}")
public ResponseEntity<Object> getOneProduct(@PathVariable(value = "id") UUID id) {
    Optional<ProductModel> productO = productRepository.findById(id);
    if (productO.isEmpty()) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Product not found.");
    }
    productO.get().add(linkTo(methodOn(ProductController.class).getAllProducts()).withRel("Products List"));
    return ResponseEntity.status(HttpStatus.OK).body(productO.get());
}

Única diferença é que não referenciamos por getOne, faremos o método .getAllProducts().

Atualizado