RestFul é um estilo de posicionamento e operação de recursos, não sendo um padrão nem um protocolo. Software baseado neste estilo
Pode ser mais conciso, mais hierárquico e mais fácil de implementar o mecanismo de cache.
A forma tradicional de operar a Internet é realizada por meio de diversos parâmetros, e os métodos de solicitação são post e get. Para solicitações diferentes, precisamos usar caminhos de solicitação diferentes:
localhost:8080/item/query?id=1
localhost:8080/item/add
localhost:8080/item/update
localhost:8080/item/delete?id=1
Usando o estilo RestFul, podemos manter o caminho da solicitação inalterado e chamar métodos diferentes por meio de métodos de solicitação diferentes para alcançar funções diferentes:
localhost:8080/item/1 GET请求
localhost:8080/item POST请求
localhost:8080/item PUT请求
localhost:8080/item/1 DELETE请求
Primeiro, olhe para o método de solicitação tradicional: uri? Parâmetro 1 = valor 1 e parâmetro 2 = valor 2 ...
package com.zzt.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestFulController {
@RequestMapping("/add")
public String test(int a, int b, Model model){
model.addAttribute("msg",a+b);
return "test";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
Anotação @PathVariable: usada para implementar o estilo RestFul
package com.zzt.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestFulController {
@RequestMapping("/add/{a}/{b}")
public String test(@PathVariable int a,@PathVariable int b, Model model){
model.addAttribute("msg",a+b);
return "test";
}
}
Tomando o código acima como exemplo, @PathVariable especifica que o valor do parâmetro -int a vem de {a} em uri, e o valor do parâmetro -int b vem de {b} em uri
Neste momento, será errado acessar da forma tradicional, e você deve usar o estilo RestFul para receber os parâmetros:
Lembra que mencionamos que @RequestMapping pode definir o método de solicitação? Sim, pode ser combinado com este atributo. (Claro, SpringMVC também fornece sub-anotações, @GetMapping, @PostMapping, etc.).
@GetMapping("/add/{a}/{b}")
public String testGet(@PathVariable int a,@PathVariable int b, Model model){
model.addAttribute("msg","get请求到达 : " + (a + b));
return "test";
}
@PostMapping("/add/{a}/{b}")
public String testPost(@PathVariable int a,@PathVariable int b, Model model){
model.addAttribute("msg","post请求到达 : "+ (a+b));
return "test";
}
<body>
<a href="add/1/2">get提交方式
<form action="add/3/4" method="post">
<input type="submit" value="提交">
</form>
</body>
Vantagens do RestFul: conciso (elimina o problema de usar nomes de parâmetro), eficiente (mecanismo de cache) e seguro (porque a solicitação não contém nomes de parâmetro)