Open leandromoraesrj opened 2 years ago
No Spring Framework, @Param ( org.springframework.data.repository.query.Param ) é usado para vincular o parâmetro method ao parâmetro Query, conforme:
@Query("select e from Employee e where e.deptId = :deptId")
List<Employee> findEmployeeByDeptId(@Param("deptId") Long departmentId);
@PathVariable é usado para obter um path reservado do URI;
@RequestParam é usado para obter um path reservado do URI também, mas ligando parâmetros de solicitação a parâmetros de método.
Se a URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013 obtiver as faturas do usuário 1234 em 5 de dezembro de 2013, o método do controlador será semelhante a:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
}
Quando enviado uma requisição do tipo "Post", é possível definir se os dados serão trafegados como json ou xml (tanto no recebimento quanto na resposta);
@RequestMapping(
value = {"/api/clientes/hello/{nome}", "/api/hello"},
method = RequestMethod.POST,
consumes = { "application/json", "application/xml" },
produces = { "application/json", "application/xml" }
)
@ResponseBody
public Cliente helloCliente(@PathVariable("nome") String nomeCliente, @RequestBody Cliente cliente){
return String.format("Hello %s ", nomeCliente);
}
@ResponseBody é o que vamos responder; @RequestBody é o que vamos receber;
Um endpoint pode ter o mesmo mapeamento, mesmo de Verbos diferentes:
@GetMapping("/buscarPorParametros")
ou
@PostMapping("/buscarPorParametros")
É possível utilizar o @RequestBody ao invés de um @PathVariable ou @RequestParam e solicitar uma classe como parâmetro; Serve tanto para o "GET" quanto o "POST";
Quando usar @RequestParam, @Param e @PathVariable