Restful风格笔记

Restful风格知识点

@RestController注解

在类上添加@RestController可以默认类中的所有方法都带有@ResponseBody注解,可以省去一个个添加的麻烦。

@RestController
@RequestMapping("/restful")
//@CrossOrigin(origins = {"http://localhost:8080","http://www.imooc.com"})
//@CrossOrigin(origins = "*",maxAge = 3600)
public class RestfulController {@GetMapping("/request")//@ResponseBodypublic String doGetRequest(){return "{\"message\":\"返回查询结果\"}";}// POST /article/1// POST /restful/request/100@PostMapping("/request/{rid}")//@ResponseBodypublic String doPostRequest(@PathVariable("rid") Integer requestId, Person person){System.out.println(person.getName() + ":" + person.getAge());return "{\"message\":\"数据新建成功\",\"id\":" + requestId + "}";}@PutMapping("/request")//@ResponseBodypublic String doPutRequest(Person person){System.out.println(person.getName() + ":" + person.getAge());return "{\"message\":\"数据更新成功\"}";}@DeleteMapping("/request")//@ResponseBodypublic String doDeleteRequest(){return "{\"message\":\"数据删除成功\"}";}@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 list = new ArrayList();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;}}

路径变量

@PathVariable注解可以让控制方法接收前端传来的请求中的路径变量。例如下面这个例子,无论前端传来1还是100这个id都能被控制方法中的requestId这个变量通过@PathVariable注解来接收从而在控制方法中使用。

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

简单请求与非简单请求

简单请求是指标准结构的HTTP请求对应GET/POST请求
非简单请求是复杂要求的HTTP请求指PUT/DELETE、扩展标准请求
两者最大区别是非简单请求发送前需要发送预检请求
SpringMVC默认只支持get、post请求,要处理非简单请求需要在web.xml中配置过滤器。

<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>

然后在控制方法中返回实体对象即可,如果有多个实体需要返回,则可以使用List。

@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 list = new ArrayList();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;}

如果实体类中包含了日期变量,则需要使用特殊的注解进行格式转变。

public class Person {private String name;private Integer age;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")private Date 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;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}
}

浏览器的跨域访问

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

<img>- 显示远程图片
<script>- 加载远程JS
<link> - 加载远程CSS

请求头中的Sec-Fetch-Mode:cors说明这是一个跨域访问的请求。
响应头中的Vary: Origin,Access-Control-Request-Method, Access-Control-Request-Headers通知浏览器这是一个允许跨域访问的url。

在控制类之前添加注解解决跨域访问问题。
使用@CrossOrigin注解添加允许访问的url。
maxAge参数设置缓存预检请求结果的时间。

@CrossOrigin(origins = {"http://localhost:8080","http://www.imooc.com"},maxAge = 3600)

在配置文件中添加配置解决跨域访问问题。
在applicationContext.xml中添加mvc:cors设置允许访问的url。

<mvc:cors><mvc:mapping path="/restful/**"allowed-origins="http://localhost:8080,http://www.imooc.com"max-age="3600"/></mvc:cors>

path代表允许访问哪个路径下的资源。
注:注解和配置一起使用时,以注解配置为准。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3258.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础——正则表达式

1 概述 正则表达式用于匹配规定格式的字符串。 除了上面的以外&#xff0c;还有一个符号就是括号&#xff0c;括号括起来的表示一个捕获组&#xff0c;一个捕获组可以作为一个重复单位来处理。 2 使用 2.1 判断是否匹配 String自带了一个可以使用正则表达式判断字符串是…

随着人工智能时代的到来,算力需求的成倍增长成为新的趋势

方向一&#xff1a;AI与算力相辅相成 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。…

Python爬取影评并进行情感分析和数据可视化

Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化一、引言二、使用requestsBeautifulSoup进行影评的爬取1、分析界面元素2、编写代码 三、情感分析1、数据预处理2、情感分析3、数据可视化 一、引言 前几天出了《航海王&#xff1…

如何优雅地使用Low Code提高开发效率

2023年&#xff0c;低代码热度有&#xff0c;但是在企业内部核心场景的落地比例不高&#xff0c;推进进展也没有想象中快。就算是这样&#xff0c;低代码赛道也在“暗流涌动”。 数字化趋势下&#xff0c;很多企业想要以数字化的手段进行降本增效。很多企业希望以低代码的模式…

Innovus: dbGet 快速学习教程

dbGet是innovus/encounter工具自带的"database access command"命令中的一部分&#xff0c;它几乎可以用来获取设计相关的一切信息。 输入dbGet 按[Tab]键&#xff0c;能看到三个选项&#xff0c;分别是head / top /selected。这三个选项所代表的意义如下: head --…

win10笔记本电脑总是自动休眠解决办法

1、运行regedit&#xff0c;进入注册表编辑器&#xff1b; 2、在打开的注册表编辑器左侧定位到&#xff1a;计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0&…

fastadmin给操作按钮添加权限菜单控制|新增权限控制菜单

1、在对应的控制器文件中&#xff0c;添加如下代码&#xff1a; $adminIds $this->getDataLimitAdminIds(); if (is_array($adminIds)) {if (!in_array($row[$this->dataLimitField], $adminIds)) {$this->error(__(You have no permission));} } 2、在对应的index…

Angular实现一个简单的带tabs选项卡切换的首页导航功能

Angular版本&#xff1a;16.1.1 项目结构&#xff1a; angular.json配置&#xff1a; {"$schema": "./node_modules/angular/cli/lib/config/schema.json","version": 1,"newProjectRoot": "projects","projects"…

微服务: sleuth和zipkin的用处与zipkin安装使用(下)

目录 0. 上篇传送门: 1. 前言简介 mq安装传送门: 微服务: 01-rabbitmq的应用场景及安装(docker) 1.1 Sleuth是一款分布式跟踪解决方案。 1.2 Zipkin是一个开源的分布式跟踪系统。 2. zipkin安装方式 2.1 windows下安装zipkin: 2.1.0 下载jar包位置 2.1.1 下载后,找…

生成 ocr key 字符集 alphabet 6698个字符

生成 ocr key 字符集 alphabet import pickle as pkl#----------- 生成 ocr key 字符集 alphabet alphabet_set set() # 数据集label infofiles_label [/home/jlb/下载/rec_data_lesson_demo/train.txt, /home/jlb/下载/rec_data_lesson_demo/val.txt]# ppocr中文key infofil…

OA办公系统如何通过审批流程提高效率

企业的发展与管理离不开信息化&#xff0c;很多企业的信息化都会选择从OA信息化开始。一个成熟先进的OA办公系统流程审批也是核心功能关注的功能之一&#xff0c;今天小编举例有18年平台经验的天翎低代码平台OA系统&#xff0c;给大家分享一下如果提升流程审批效率&#xff1a;…

IP路由选择过程

1.1路由选择基础 路由选择是指将分组从一个设备通过互联网络发往位于不同网络上的另一个设备的操作。路由器不关注网络中的主机&#xff0c;而只关注互联起来的网络以及通往各个网络的最佳路径。 目标主机的逻辑网络地址用来获取通过可路由网络传送到指定网络中的分组&#xf…