Restful风格
Restful是一种软件设计规范,是客户端和服务器端进行数据交互的一个规范。早期使用JSP页面开发网页时,数据交互基本都是通过表单提交,然后通过内置对象传递。当HTML5兴起,移动互联网兴起,网站后端服务,不仅要考虑PC端的网页,也要考虑移动端数据的展示、小程序、HTML5页面等。如果需要多个终端(Android、iOS、小程序、Pad、HTML5页面)共用一个后端,一般来说主流方案就是使用JSON进行传递。RESTful则规范了请求的URL,注意RESTful只是一个规范,不是一个技术。
在RESTful中:
- 一个URL操作一个资源
- 请求的URL中不能有动词
- 使用HTTP的请求方式来描述请求行为,例如:
提交方式 | 地址 | 说明 |
---|---|---|
GET(查) | http://localhost:8080/book/1 | 查询id为1的书 |
POTS(增) | http://localhost:8080/book/1 | 添加一本书,书的 id 为 1 |
DELETE(删) | http://localhost:8080/book/1 | 删除 id 为1 的书 |
PUT(改) | http://localhost:8080/book/1 | 修改 id 为 1 的书 |
在RESTful接口中,所有的方法都是返回JSON,没有返回页面的(ModelAndView),因此,所有的方法上都需要添加@ResponseBody注解。
一个替代的简化方案,是使用 @RestController 代替@Controller。
@RestController实际上是一个组合注解,是@Controller和@ResponseBody的组合:
案例
package com.sxt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sxt.pojo.User;
/**
* 基于注解的自定义的controller
* @author xieS
*
*/
@Controller
public class HelloController {
/**
* 按照id查询 例如 http://localhost:8080/user/1 表示查询id为1的用户 * *
* @param id
* @return
*/
@GetMapping("/user/{id}/{name}")
@ResponseBody
public void getUserById(@PathVariable Integer id,@PathVariable String name) {
System.out.println("id:"+id);
}
/** 使用POST请求来完成添加功能
* @param user
* @return
*/
@PostMapping("/user")
@ResponseBody
public void addUser(@RequestBody User user) {
System.out.println(user);
}
@DeleteMapping("/user/{id}")
@ResponseBody
public void deleteUserById(@PathVariable Integer id) {
System.out.println(id);
}
@PutMapping("/user")
@ResponseBody
public void updateUserById(@RequestBody User user) {
System.out.println(user);
}
}
user.java
package com.sxt.pojo;
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}