RESTful风格的应用

时间:2020-05-27
本文章向大家介绍RESTful风格的应用,主要包括RESTful风格的应用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

开发第一个RESTful应用

RESTful开发风格

开发第一个RESTful应用

@Controller
@RequestMapping("/restful")
public class RestfulController {

    @GetMapping("/request")
    @ResponseBody
    public String doGetRequest() {
        return "{\"message\":\"返回查询结果\"}";
    }
}

RESTful基本使用

实现RESTful实验室

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>RESTful实验室</title>
    <script src="jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            $("#btnGet").click(function () {
                $.ajax({
                    url : "/restful/request",
                    type : "get",
                    dataType : "json",
                    success : function (json) {
                        $("#message").text(json.message);
                    }
                })
            });
        })

        $(function () {
            $("#btnPost").click(function () {
                $.ajax({
                    url : "/restful/request",
                    type : "post",
                    dataType : "json",
                    success : function (json) {
                        $("#message").text(json.message)
                    }
                })
            });
        })

        $(function () {
            $("#btnPut").click(function () {
                $.ajax({
                    url : "/restful/request",
                    type : "put",
                    dataType : "json",
                    success : function (json) {
                        $("#message").text(json.message)
                    }
                })
            });
        })

        $(function () {
            $("#btnDelete").click(function () {
                $.ajax({
                    url : "/restful/request",
                    type : "delete",
                    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请求"/>
    <h1 id="message"></h1>
</body>
</html>
package com.jesse.restful.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Created by Kong on 2020/5/26.
 */
@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\":\"数据删除成功\"}";
    }
}

RestController注解与路径变量

//@Controller
@RestController
@RequestMapping("/restful")
public class RestfulController {

    @GetMapping("/request")
    //@ResponseBody
    public String doGetRequest() {
        return "{\"message\":\"返回查询结果\"}";
    }

    //  POST    /article/1
    //  POST    /restful/request/100
    @PostMapping("/request/{rid}")
    //@ResponseBody
    public String doPostRequest(@PathVariable("rid") Integer requestId){
        return "{\"message\":\"数据新建成功\",\"id\":" +requestId +"}";
    }

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

    @DeleteMapping("/request")
    //@ResponseBody
    public String doDeleteRequest(){
        return "{\"message\":\"数据删除成功\"}";
    }
}

简单请求与非简单请求

    @PostMapping("/request/{rid}")
    //@ResponseBody
    public String doPostRequest(@PathVariable("rid") Integer requestId, Person person){
        System.out.println(person.getName() + ":" + person.getAge());
        return "{\"message\":\"数据新建成功\",\"id\":" +requestId +"}";
    }

    @PutMapping("/request")
    //@ResponseBody
    public String doPutRequest(Person person){
        System.out.println(person.getName() + ":" + person.getAge());
        return "{\"message\":\"数据更新成功\"}";
    }
    <!--增加过滤器,扩展springmvc的处理请求能力-->
    <filter>
        <filter-name>formContentFilter</filter-name>
        <filter-class>org.springframework.web.filter.FormContentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>formContentFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

JSON序列化

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.9.9</version>
    </dependency>
public class Person {
    private String name;
    private Integer age;
    private Date birthday;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
    @GetMapping("/person")
    public Person findByPersonId(Integer id){
        Person p = new Person();
        if (id==1){
            p.setName("lily");
            p.setAge(23);
        }else if (id==2){
            p.setName("smith");
            p.setAge(22);
        }
        return p;
    }

    @GetMapping("/persons")
    public List<Person> findPersons(){
        List<Person> list = new ArrayList<Person>();
        Person p1 = new Person();
        p1.setName("lily");
        p1.setAge(23);
        p1.setBirthday(new Date());

        Person p2 = new Person();
        p2.setName("smith");
        p2.setAge(22);
        p2.setBirthday(new Date());
        list.add(p1);
        list.add(p2);
        return list;
    }

跨域问题

浏览器同源策略

Spring的MVC解决跨域访问

  • @CrossOrigin-Controller跨域注解
@RestController
@RequestMapping("/restful")
//maxAge对于非简单请求的预检请求进行缓冲,避免每次都要发送两个请求
@CrossOrigin(origins = {"http://localhost:8080","http://www.imooc.com"}, maxAge = 3600)
public class RestfulController
  • mvc:cors-Spring的MVC全局跨域配置
    <mvc:default-servlet-handler/>
    <mvc:cors>
        <mvc:mapping path="/restful/**"
                     allowed-origins="http://localhost:8080,http://www.imooc.com"
                     max-age="3600"/>
    </mvc:cors>

原文地址:https://www.cnblogs.com/jessekkk/p/12974521.html