SpringBoot系列 - 实现RESTful接口
REST,即Representational State Transfer的缩写,对这个词组的翻译是表现层状态转化
。
RESTful是一种软件设计风格,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
SpringMVC对RESTful风格的接口有着天然的支持,本篇将讲述如何在SpringBoot中怎样写。
几个注解
在讲述使用之前,想要理解SpringMVC的几个常用注解:
- @Controller:修饰class,用来创建处理http请求的对象
- @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
- @RequestMapping:配置url映射
- @PostMapping: 这个是@RequestMapping+POST方法的简写
- @RequestHeader: 请求Header参数
- @PathVariable: URL路径参数,比如/user/{id}中的id参数
- @RequestParam: URL请求参数,比如/user?id=1中的id参数
- @RequestBody: 请求Body参数
下面我们尝试使用Spring MVC来实现一组对User对象操作的RESTful API,配合注释详细说明在Spring MVC中如何映射HTTP请求、如何传参、如何编写单元测试。
API设计
RESTful API具体设计如下:
请求类型 | URL | 功能说明 |
---|---|---|
GET | /users | 查询用户列表 |
POST | /users | 创建一个用户 |
GET | /users/{id} | 根据id查询用户 |
PUT | /users/{id} | 根据id更新用户 |
DELTE | /users/{id} | 更加id删除用户 |
RESTful架构有一些典型的设计误区,就是URI包含动词。因为”资源”表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。 上面设计的API的URI中都是名词。
实体定义
1
|
public class User {
|
Controller实现
接下来就可以编写RestController了,这里为了演示,会将数据保存到内存Map中,实际使用肯定是保存到数据库中。
/**
* 接口类
*/
测试
接下来就是写一个测试来测一下,SpringMVC的内置测试支持非常方便。
先写一个json和对象之间相互转化的工具类,使用Jackson库:
public class JacksonUtil {
private static ObjectMapper mapper = new ObjectMapper();
public static String bean2Json(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
public static <T> T json2Bean(String jsonStr, TypeReference<T> typeReference) {
try {
return mapper.readValue(jsonStr, typeReference);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
然后再编写单元测试:
1
|
|