常用注解 和 RESTful API

ref1

ref2

ref3

● @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;
    }
}
  1. 真实开发时,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

    1. http://api.qc.com/v1/
    2. friends: 删除某人的好友 (在http parameter指定好友id)

    POST

    1. http://api.qc.com/v1/
    2. friends: 添加好友

    UPDATE

    1. UPDATE
    2. 更新个人资料

● 为什么要使用 RESTful 设计?

  • 更多是在前后端分离场景下,契合后端服务多端统一的需求
  • 通过一套统一的接口为 Web\iOS\Android 提供服务
end
  • 作者:(联系作者)
  • 发表时间:2022-03-24 16:41
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论




    1 / 0