leandromoraesrj / sincad-backend

PROJETO BASE DE EXEMPLO USANDO AS MELHORES PRATICAS DE DESENVOLVIMENTO
0 stars 0 forks source link

Usando @RequestParam, @PathVariable ou @RequestBody no Controller #38

Open leandromoraesrj opened 2 years ago

leandromoraesrj commented 2 years ago

Quando usar @RequestParam, @Param e @PathVariable

leandromoraesrj commented 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";

Referência:https://www.baeldung.com/spring-request-param