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
- [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
- CentOS6.5下安装JDK
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 开源API测试工具 Hitchhiker v0.8 - 自动化测试结果统计
- 腾讯AI-JavaAPI示例代码
- C++ 模板学习
- 小程序游戏上线!独家微信官方及专业核心解读!
- 零基础小白成为大数据技术专家必知的学习历程
- Wandelbots重新定义对机器人进行编程的方式
- 结构体字节对齐
- 中国IDC圈、科智咨询王若冰:从供到需——IDC产业的演进之路
- 本周网络空间态势摘要
- C++重要知识点小结---1
- C++中派生类对基类成员的访问形式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法