前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RESTful风格的应用

RESTful风格的应用

作者头像
Breeze.
发布2022-09-23 11:44:16
2750
发布2022-09-23 11:44:16
举报

RESTful应用

REST-表现层状态转换,资源在网络中以某种表现形式进行状态转移

RESTfl -是基于REST理念的一套开发风格,是具体的开发规则

RESTful开发规范

  • 使用URL作为用户交互入口
  • 明确的语义规范(GET|POST|PUT|DELETE)
  • 只返回数据(JSON|XML),不包含任何展现

RESTful命名要求

RESTful基本使用

RESTful实验室

代码语言:javascript
复制
@Controller
@RequestMapping("/restful")
public class RestfulController {
    @GetMapping("/request")
    @ResponseBody
    public String doGetRequest() {
        return "{\"message\":\"返回查询结果\"}";
    }

    @PostMapping("/request")
    @ResponseBody
    public String doPostRequest() {
        return "{\"message\":\"数据新建成功\"}";
    }

    @PutMapping("/request")
    @ResponseBody
    public String doPutRequest() {
        return "{\"message\":\"数据更新成功\"}";
    }

    @DeleteMapping("/request")
    @ResponseBody
    public String doDeleteRequest() {
        return "{\"message\":\"数据删除成功\"}";
    }
}
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://unpkg.com/jquery@3.3.1/dist/jquery.min.js"></script>
    <script>
        $(function () {
            $("#btnGet").click(function () {
                $.ajax({
                    url:"/restful/request",
                    type:"get",
                    dataType:"json",
                    success: function (json) {
                        $("#message").text(json.message);
                    },
                })
            });
        })
        ...
    </script>
</head>
<body>
<input type="button" id="btnGet" value="发送Get请求">
<input type="button" id="btnPost" value="发送Post请求">
<input type="button" id="btnPut" value="发送Put请求">
<input type="button" id="btnDelete" value="发送Delete请求">
<h2 id="message"></h2>
</body>
</html>

RestController注解与路径变量

@RestController:简化开发过程。不需要在方法上额外添加@ResponseBody

代码语言:javascript
复制
//路径变量:存储在URI中的可变的值
@PostMapping("/request/{rid}")
public String doPostRequest(@PathVariable("rid") Integer requestId) {
    return "{\"message\":\"数据新建成功\",\"id\":" + requestId + "}";
}

简单请求与非简单请求

  • 简单请求是指标准结构的HTTP请求,对应GET/POST请求
  • 非简单请求时复杂要求的HTTP请求,值PUT/DELETE、扩展标准请求
  • 两者最大区别是非简单请求发送前需要发送预检请求
非简单请求

SpringMVC需要增加一个过滤器才能接收PUT/DELETE请求

代码语言:javascript
复制
<filter>
    <filter-name>formContextFilter</filter-name>
    <filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>formContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

JSON序列化

返回实体对象,同时有@RestController或增加了@ResponseBody,自动的通过配置的Jackson对实体对象进行序列化

1.添加依赖
代码语言:javascript
复制
<!--核心-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.2</version>
</dependency>
<!--数据绑定-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>
<!--注解-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.3</version>
</dependency>
2.方法定义时不在返回String而是返回实例化对象
代码语言:javascript
复制
@GetMapping("/person")
// 返回实体对象,同时有@RestController或增加了@ResponseBody,自动的通过配置的Jackson对实体对象进行序列化
public Person findByPersonId(Integer id) {
    Person p = new Person();
    if (id == 1) {
        p.setName("lily");
        p.setAge(23);
    } else if (id == 2) {
        p.setName("Jack");
        p.setAge(22);
    }
    return p;
}
3.日期类型转换

在使用日期类型时添加@JsonFormat()注解进行格式化输出,要指明输出格式还有时区的偏差

跨域问题

  • 同源策略:阻止从一个域加载的脚本去获取另一个域上的资源
  • 只要协议、域名、端口有任何一个不同,都被当作是不同的域
  • 浏览器Console看到Access-Control-Allow-Orgin就代表跨域了

SpringMVC跨域访问

  • CORS是一种机制,使用额外的HTTP头通知浏览器可以访问其他域
  • URL响应头包含 Access-Control-* 指明请求允许跨域

@CrossOrigin - Controller跨域注解

代码语言:javascript
复制
//多域名跨域
@CrossOrigin(origins = "{http://localhost:8080,http://www.huazll.cn}")

<mvc:cors> - SpringMVC全局跨域配置

代码语言:javascript
复制
<mvc:cors>
    <mvc:mapping path="/restful/**" allowed-origins="http://localhost:8080,http://www.huazll.cn" max-age="3600"/>
</mvc:cors>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RESTful应用
    • RESTful开发规范
      • RESTful命名要求
      • RESTful基本使用
        • RESTful实验室
          • RestController注解与路径变量
            • 简单请求与非简单请求
              • 非简单请求
            • JSON序列化
              • 1.添加依赖
              • 2.方法定义时不在返回String而是返回实例化对象
              • 3.日期类型转换
          • 跨域问题
            • SpringMVC跨域访问
            相关产品与服务
            文件存储
            文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档