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表单的访问的话,会出现请求的PUT和DELETE,都会走get接口,
:查看源码
在yaml文件中开启
spring:
mvc:
hiddenmethod:
filter:
enabled: true
由于springboot的HiddenHttpMethodFilter里面配置了,所以可以使用以下方法
请注意:使用PUT或者DELETE方法进行提交,form表单中method必须等于post
测试REST风格二:SpringBoot中常用的几种参数注解
1.注解:@PathVariable、@RequestHeader、@ModelAttribute
controller层
@GetMapping("/car/{id}/owner/{username}")
public Map getCar(@PathVariable("id") Integer id,
@PathVariable("username") String username,
@PathVariable Map pv,
@RequestHeader("User-Agent") String userAgent,
@RequestHeader Map header){
Map 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 getCarParm(@PathVariable("id") Integer id,
@RequestParam("age") Integer age,
@RequestParam("interest") List interest,
@RequestParam Map params){
// @CookieValue("_ga") String _ga,
// @CookieValue("_ga") Cookie cookie){
Map 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;
}
@PathVariable、 @RequestHeader、 @ModelAttribute、
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 success(@RequestAttribute("code") Integer code,
@RequestAttribute("msg") String msg,
HttpServletRequest request){
Map 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注入
@PostMapping("/save")
@ResponseBody
public Map save(@RequestBody String content){
Map map = new HashMap<>();
map.put("STring",content);
return map;
}



