一:SpringBoot中的Rest映射
1.Rest风格介绍
首先解释什么是Rest风格
REST风格
REST 是一种软件架构风格,其本身是围绕HTTP的URI资源进行约束。
URI 中不能有动词,因为 URI 本身是资源的表示,所以网址中不能有动词,只能由名词,动词由 HTTP 协议中的操作:GET、POSE、PUT、DELETE 四种方法表示。
如果有自定以的状态码,由于 REST 本身是根据 HTTP 协议进行规范的,所以尽量使用 HTTP 协议的状态码。
200:OK 请求响应成功,服务器返回数据,该操作是幂等的
201:CREATED 新建或者修改数据成功
204:NOT CONTENT 删除数据成功
400:BAD REQUEST 用户发出的请求有问题,该操作是幂等的
401:Unauthoried 表示用户没有认证,无法进行操作
403:Forbidden 用户访问是被禁止的
404:Not Found 请求资源不存在
422:Unprocesable Entity 当创建一个对象时,发生一个验证错误
500:INTERNAL SERVER ERROR 服务器内部错误,用户无法判断请求是否成功
503:Service Unavailable 服务器不可用状态,多半是服务器问题,例如CPU占用率打等。
风格差别:
Rest风格样例:
@RestController
public class TestController {
@GetMapping("/user")
public String getUser(){
return null;
}
@PostMapping("/user")
public String postUser(){
return null;
}
@PutMapping("/user")
public String putUser(){
return null;
}
@DeleteMapping("/user")
public String deleteUser(){
return null;
}
}
2.如何在form表单中使用put和delete方法提交
错`误案列:
@RestController
public class TestController {
@GetMapping("/user")
public String getUser(){
return "GET";
}
@PostMapping("/user")
public String postUser(){
return "POST";
}
@PutMapping("/user")
public String putUser(){
return "PUT";
}
@DeleteMapping("/user")
public String deleteUser(){
return "DELETE";
}
}
html
测试REST风格
<form action="/user" method="GET">
<input type="submit" value="REST-GET">
</form>
<form action="/user" method="POST">
<input type="submit" value="REST-POST">
</form>
<form action="/user" method="PUT">
<input type="submit" value="REST-PUT">
</form>
<form action="/user" method="DELETE">
<input type="submit" value="REST-DELETE">
</form>
如果使用以上代码进行form表单的访问的话,会出现请求的PUT和DELETE,都会走get接口,
:查看源码
在yaml文件中开启
spring:
mvc:
hiddenmethod:
filter:
enabled: true
由于springboot的HiddenHttpMethodFilter里面配置了,所以可以使用以下方法
请注意:使用PUT或者DELETE方法进行提交,form表单中method必须等于post
测试REST风格
<form action="/user" method="GET">
<input type="submit" value="REST-GET">
</form>
<form action="/user" method="POST">
<input type="submit" value="REST-POST">
</form>
<form action="/user" method="POST">
<input name="_method" type="hidden" value="PUT">
<input type="submit" value="REST-PUT">
</form>
<form action="/user" method="POST">
<input name="_method" type="hidden" value="DELETE">
<input type="submit" value="REST-DELETE">
</form>
二:SpringBoot中常用的几种参数注解
1.注解:@PathVariable、@RequestHeader、@ModelAttribute
controller层
@GetMapping("/car/{id}/owner/{username}")
public Map<String,Object> getCar(@PathVariable("id") Integer id,
@PathVariable("username") String username,
@PathVariable Map<String,Object> pv,
@RequestHeader("User-Agent") String userAgent,
@RequestHeader Map<String,String> header){
Map<String, Object> map = new HashMap<>();
map.put("id",id);
map.put("username",username);
map.put("pv",pv);
map.put("userAgent",userAgent);
map.put("header",header);
return map;
}
@GetMapping("/car/{id}")
public Map<String,Object> getCarParm(@PathVariable("id") Integer id,
@RequestParam("age") Integer age,
@RequestParam("interest") List<String> interest,
@RequestParam Map<String,Object> params){
// @CookieValue("_ga") String _ga,
// @CookieValue("_ga") Cookie cookie){
Map<String, Object> map = new HashMap<>();
map.put("id",id);
map.put("age",age);
map.put("interest",interest);
map.put("params",params);
// map.put("_ga",_ga);
// map.put("cookie",cookie);
return map;
}
<a href="/car/1/owner/wang">
@PathVariable、
</a>
<a href="/car/1/owner/wang">
@RequestHeader、
</a>
<a href="/car/1?age=18&interest=girl&interest=popise">
@ModelAttribute、
</a>
2.使用原生的mvc中的HttpServletRequest request
@GetMapping("/goto")
public String goToPage(HttpServletRequest request){
request.setAttribute("msg","成功了。。。。");
request.setAttribute("code",200);
return "forward:/success";
}
@ResponseBody
@GetMapping("/success")
public Map<String, Object> success(@RequestAttribute("code") Integer code,
@RequestAttribute("msg") String msg,
HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
map.put("msg",msg);
map.put("code",code);
Object msg1 = request.getAttribute("msg");
if(msg.equals(msg1)){
map.put("status",true);
}
// map.put("request",request);
return map;
}
3.使用@RequestBody注入
<form action="/save" method="post">
测试@RequestBody获取数据
用户名:<input name="userName" />
邮箱:<input name="email"/>
<input type="submit" value="提交"/>
</form>
@PostMapping("/save")
@ResponseBody
public Map<String, Object> save(@RequestBody String content){
Map<String, Object> map = new HashMap<>();
map.put("STring",content);
return map;
}