MÉTODO POST
O POST receberá o recurso, irá fazer uma validação inicial e salvar na base de dados. Antes disso, para recebermos esses valores via JSON, precisaremos mapear esses campos.
Para isso, usaremos uma feature: records. Eles nos permitem iniciar esses objetos para transferência de dados, como os DTOS por exemplo. Criaremos portanto, um DTO, ele:
Irá receber dados desse recurso "Product";
Fará a validação inicial;
Se tudo estiver OK, ele fará a conversão para o model e salva este recurso na base de dados.
ResponseEntity - Retorno do método, neste caso do ProductModel, que na linha abaixo, será criado.
O método saveProduct vai receber como parâmetro (corpo da solicitação Http) um ProductRecordDto que conté um name e um value.
@RequestBody - Ajuda a deixar a aplicação no padrão REST, pois, sem ela, se mapeamos algum endereço, o Spring entende que é algo que está dentro da nossa aplicação, como um arquivo, por exemplo. O @ResponseBody vai entender que esse é um endereço de uma página da web, obedecendo ao princípio do REST de comunicação via protocolo HTTP.
@Valid - Para que esses dados entrem de fato em vigor
Dentro da função iniciamos um ProductModel. O Dto serve somente para receber o que está vindo na requisição do corpo em formato JSON.
Por isso na linha abaixo, usamos o BeanUtils.copyProperties para fazer a conversão de JSON para Model.
Nessa ultima linha, construimos o retorno. O retorno do tipo ResponseEntity será em duas partes:
Status - Se tudo ocorreu bem, precisamos enviar para o cliente que o recurso foi criado. Usamos portanto: HttpStatus.CREATED
Já no .body (corpo) dessa reposta, poderemos enviar o que foi salvo. (Nome e Valor) que o cliente colocou + o ID que será gerado.
E pra fazer esse save? Como pode ser observado, estamos importando o productRepository. Usaremos seu método .save dentro do body, passando nosso var productModel.
Atualizado