Para criar um método POST, precisamos mapeá-lo. Para isso existem duas formas, através da anotação @RequestMapping passando como value a URL e o método HTTP.
Porém, desse modo em um mesmo controller, em todo novo método a URL deveria ser declarada, e isso dificulta na manutenção do código.
Por isso, é recomendado utilizar a segunda forma, onde a URL é declarada uma única vez na anotação @RequestMapping na declaração da classe e os métodos HTTP são definidos por anotações próprias.
Com o método Post mapeado, é preciso informar ao Spring que os parâmetros que serão recebidos estão no corpo da requisição, fazemos isso utilizando a anotação @RequestBody.
Quando criamos o método lista, utilizamos um DTO para enviar os dados ao cliente. Dessa vez, precisamos que o cliente nos envie dados, para isso utilizamos uma outra classe, chamada de form.
Da mesma maneira que o DTO só tem atributo de tipo primitivo, o Form também será assim. Além de também ter getters e setters.
Para seguir as boas práticas do modelo REST, um cadastro deve retornar o código HTTP 201, que significa que uma requisição foi processada com sucesso e um novo recurso foi criado no servidor.
Para que retornar esse código, o método não pode retornar void, mas sim o objeto ResponseEntity com um DTO.
Esse objeto devolve o código HTTP, um cabeçalho com o location (URL do recurso criado), e um corpo com uma representação do recurso criado.