1.1 RESTful风格接口介绍
RESTful是目前最流行的 API 设计规范,用于 Web 数据接口的设计。通过不同的HTTP请求方法来实现对资源的CRUD操作,请求URL为"/资源名称/资源标识"的形式,用到的HTTP请求方法如下:
- GET:读取(Read)
- POST:新建(Create)
- PUT:更新(Update)
- PATCH:更新(Update),通常是部分更新
- DELETE:删除(Delete)
举例:
操作 | 普通接口URL | RESTful接口URL |
---|---|---|
查询全部 | /getDevices | (GET) /devices |
查询单个 | /getDevice?id=xxx | (GET) /devices/{id} |
添加 | /addDevice | (POST) /devices |
修改 | /updateDevice | (PUT) /devices/{id} |
删除 | /deleteDevice | (DELETE) /devices/{id} |
通过上面的对比,可以看到RESTful风格接口更加简洁。
关于更为详细的RESTful接口介绍推荐这一篇文章
1.2 编写Controller
Controller的编写非常简单,只需要两个注解+一个处理方法即可。
在controller包下编写UserController类,代码结构如下:
@Controller
public class UserController
{
@PostMapping("/login")
public String login()
{
....
return "success";
}
}
- @Controller表明该类为Spring MVC的一个控制器
- @PostMapping("/login")表示只要是uri为/login的POST请求,就交由该方法处理。等同于@RequestMapping(value = “/login”,method = RequestMethod.POST)
- return "success"表示返回/success界面。
1.3 前端提交数据给后端
1.3.1 获取单个值
编写login.html,代码如下:
<!DOCTYPE html>
<html lang="en">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户登陆</title>
</head>
<body>
<form action="/login" method="POST">
用户名:<input type="text" name="userName"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
UserController代码如下:
@Controller
public class UserController
{
Logger logger = LoggerFactory.getLogger(UserController.class);
@PostMapping("/login")
public String login(@RequestParam(value = "userName") String userName,@RequestParam(value = "password") String password)
{
logger.info("username:" + userName + ",password:" + password);
return "success";
}
}
在这里使用@RequestParam注解单个获取值,并注入到参数列表中。可以看到成功获取到了数据:
注:如果Controller中的变量名和html页面中的变量名一致,可以不加@RequestParam注解,Spring会自动匹配。
public String login(String userName,String password)
{
...
}
1.3.2 表单提交数据到对象
新创建User对象,代码如下:
public class User
{
private String userName;
private String password;
getter().....
setter().....
toString()....
}
修改Controller代码如下:
@PostMapping("/login")
public String login(User user)
{
logger.info(String.valueOf(user));
return "success";
}
值同样被注入进来了
1.3.3 获取PathValue
在前面的RESTful章节,我们看到了类似于这样的URI:devices/{id},那这里的id怎么获取呢?接下来演示一下:
在UserController新创建以下方法:
@GetMapping("/user/{id}")
public String get(@PathVariable("id") Integer id)
{
logger.