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.
Primeiro definimos qual Controller está esse método (ProductController.class);
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