● @Controller
- Spring MVC 会将扫描到该注解的类,然后扫描这个类下面带有 @RequestMapping 注解的方法,根据注解信息,为这个方法生成一个对应的处理器对象(Handler)
● @RequestMapping
- 配置处理器的 HTTP 请求方法,URI等信息,这样才能将请求和方法进行映射。这个注解可以作用于类上面,也可以作用于方法上面,在类上面一般是配置这个控制器的 URI 前缀
● @RestController
- 在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构下,提供 Restful API ,返回例如 JSON 数据格式。当然,返回什么样的数据格式,根据客户端的 ACCEPT 请求头来决定。
● @GetMapping
- @GetMapping 是 @RequestMapping 的 GET 请求方法的特例,只作用方法上,目的是为了提高清晰度。 ○ 可进行 GET、POST、PUT、DELETE 等请求方法;可注解在类和方法上;
● 如何返回 JSON 格式?
- 可以使用 @ResponseBody 注解
- 或者使用包含 @ResponseBody 注解的 @RestController 注解 使用时添加相关依赖 SpringMVC 和 Jackson 依赖即可直接返回
@Controller
public class JSONController {
@RequestMapping("/testJavaBean")
@ResponseBody
public User test(@RequestParam("name") String name) {
User user = new User();
user.setUserName(name);
user.setPassword("123456");
return user;
}
@RequestMapping("/testMap")
@ResponseBody
public Map test2(@RequestParam("name") String name) {
Map<String, Object> map = new HashMap<>();
map.put("name", name);
map.put("test", 123);
map.put("array", new String[]{"a", "b", "c"});
return map;
}
}
- 真实开发时,JSON 数据一般是这样的,定义Result 类{ code:xx,data具体数据xx,message:"服务器错误x"}
a. 请求成功{code:xx, data:xx}
b. 请求失败{code:xx,message:xx}
public class APIResult {
private int code;
private String message;
private Object data;
public static APIResult createOk(Object data) {
return createWithCodeAndData(ApiConstant.Code.OK, null, data);
}
public static APIResult createOKMessage(String message) {
APIResult result = new APIResult();
result.setCode(ApiConstant.Code.OK);
result.setMessage(message);
return result;
}
public static APIResult createNg(String message) {
return createWithCodeAndData(ApiConstant.Code.NG, message, null);
}
private static APIResult createWithCodeAndData(int code, String message, Object data) {
APIResult result = new APIResult();
result.setCode(code);
result.setMessage(message);
result.setData(data);
return result;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
● REST: 表现层状态转移
- 人话说:使用HTTP协议,做动词来描述操作,url 作为名词表示资源
- Server和Client之间传递某资源的一个表现形式,e.g.,(JSON XML JPG)
- HTTP Status Code传递Server的状态信息
● RESTful API 就是符合REST原则的网络接口(Application Programming Interface)
-
case: Get-获取, POST-新建/更新资源, PUT-更新资源, DELETE-删除资源
DELETE
- http://api.qc.com/v1/
- friends: 删除某人的好友 (在http parameter指定好友id)
POST
- http://api.qc.com/v1/
- friends: 添加好友
UPDATE
- UPDATE
- 更新个人资料
● 为什么要使用 RESTful 设计?
- 更多是在前后端分离场景下,契合后端服务多端统一的需求
- 通过一套统一的接口为 Web\iOS\Android 提供服务
评论
1 / 0