Olá! Tudo bem? A diferença é que a anotação RequestMapping é mais genérica e também mais customizável, normalmente usamos a RequestMapping nas classes controllers porque assim todos os métodos herdam o endereço do controller, assim evitando algumas repetições, por exemplo:
@RequestMapping
public class HelloController {
@GetMapping("/hello")
public String olaMundo() {
return "Hello World!";
}
@GetMapping("/hello/bye")
public String olaMundo() {
return "Bye World!";
}
}
A classe acima seria a mesma coisa que esta:
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String olaMundo() {
return "Hello World!";
}
@GetMapping("/bye")
public String olaMundo() {
return "Bye World!";
}
}
Essa opção ajuda a diminuir a repetição de código. Outra diferença entre o RequestMapping e o GetMapping é que o RequestMapping permite vários métodos Http ao mesmo tempo, por exemplo:
@RequestMapping(method = {RequestMethod.GET, RequestMethod.HEAD, RequestMethod.DELETE})
public String olaMundo() {
return "Hello World!";
}
Isso pode ser útil se você quiser reutilizar a lógica de um método em outro, por exemplo aceitar tanto o método POST e PUT com a mesma lógica. Uma curiosidade é que tanto o @RequestMapping quanto suas variações (@GetMapping, @PostMapping, etc) aceitam mais de uma rota, por exemplo:
@RequestMapping(path = {"/hello", "/hi", "/ola", "/oi"})
public class HelloController {
@GetMapping
public String olaMundo() {
return "Hello World!";
}
}
Resumindo, o @RequestMapping é genérico e vale para quantos métodos HTTP você quiser, enquanto o @GetMapping só vale para requisições GET, @PostMapping só para requisições POST e assim em diante. Espero ter ajudado!
Caso queira aprender mais sobre HTTP, tem esse curso aqui da Alura: https://cursos.alura.com.br/course/http-entendendo-web-por-baixo-dos-panos