RESTful基本使用
REST-表现层状态转移,资源在网络中以某种表现形式进行状态转移。
就是在web环境中获取,如图片、网页这些资源时以URL形式进行传递。
RESTful是基于REST理念的开发风格,一种开发规则。
RESTful开发规范:
- 所有资源以URL作为用户交互入口
- 明确的语义规范(GET查询、POST新增、PUT更新、DELETE删除)
- 只返回数据(JSON|XML),不包含任何展现
RESTful命名要求
@RestController = @Controller + @ResponseBody
路径变量:存在URI中可变的数值。
使用:@PathVariable
//POST /restful/request/100
@PostMapping("/request/{rid}")
@ResponseBody
public String doPostRequest(@PathVariable("rid") Integer requestId){
return "{\"message\":\"数据新增成功\",\"id\":"+requestId+"}";
}
简单请求:标准结构的HTTP请求,GET/POST
非简单请求:复杂要求的HTTP请求,PUT/DELETE/扩展标准请求
区别:非简单请求发送前需要发送预检请求
非简单请求需要增加表单内容过滤器:
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
然后直接返回值为对象类型,JSON会自动进行序列化输出成字符串,不用设置返回值类型为String了。
在对待像日期这样的特殊类型时,需要@JsonFormat注解进行设置,如:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date birthday;
跨域问题
浏览器的跨域访问问题
浏览器的同源策略:阻止一个域加载的脚本去获取另一个域上的资源
只要协议、域名、端口有任何一个不同,都被认为是不同的域
Access-Control-Allow-Origin
错误代表跨域。
同源策略示例:
HTML中允许跨域的标签:
<img>
-显示远程图片
<script>
-加载远程JS
<link>
- 加载远程CSS
Spring MVC解决跨域访问问题
CORS
跨域资源访问
CORS是一种机制,使用额外的HTTP头通知浏览器可以访问其他域的资源
URL响应头包含Access-Control-* 指明请求允许跨域
两种方法:
@CrossOrigin
- Controller跨域注解,类中使用该注解,说明当前Controller所映射的URL允许被跨域访问。
@CrossOrigin(origins={"http://localhost:8080"},maxAge = 3600)
//maxAge设置预检请求的缓存时间,对预检请求的结果进行缓存,缓存时间内,不需要再发送预检请求,直接发送实际请求
p
<mvc:cors>
- Spring MVC全局跨域配置
<mvc:cors>
<mvc:mapping path="/restful/**" allowed-origins="http://localhost:8080" max-age="3600"/>
</mvc:cors>