07-Annotation
1. @RequestMapping
- 作用:用于建立请求URL、处理请求方法之间的对应关系
- 位置
- 类上:请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录
- 方法上:请求URL的第二级访问目录
- 属性
value
:指定请求的 URL。和path属性的作用是一样的method
:指定请求的方式params
:指定限制请求参数的条件。支持简单的表达式。要求请求参数的key、value必须和配置的一模一样headers
:指定限制请求消息头的条件
// 1. 类、方法上皆可
@Controller
@RequestMapping("/myRequestMapping")
public class MyRequestMappingCtl {
// 2. 路径"/"可有可无
@RequestMapping("one")
public String one() {
return "second";
}
// 3. 多对一
@RequestMapping(value = {"/hi", "/hello"})
public String multi() {
return "second";
}
// 4. method设置请求方式
@RequestMapping(value = "/mtd", method = {RequestMethod.GET, RequestMethod.POST})
public String mtd() {
System.out.println("mtd = " + true);
return "second";
}
// 5. 请求参数控制
// @RequestMapping(value = "/params", params = {"name", "!pwd"})
// @RequestMapping(value = "/params", params = {"name==root", "pwd!=123"})
@RequestMapping(value = "/params", params = {"name!=root", "pwd"})
public String params() {
System.out.println("params = " + true);
return "second";
}
// 6. 请求头控制
@RequestMapping(value = "/headers", headers = {"Host=localhost:8080"})
public String headers() {
System.out.println("headers = " + true);
return "second";
}
// 7. 路径参数
@RequestMapping(value = "/pathVariable/{id}/{name}")
public String pathVariable(@PathVariable("id") Integer id1, @PathVariable("name") String name1) {
System.out.println("id1 = " + id1);
System.out.println("name1 = " + name1);
return "second";
}
}
<%-- 解决中文乱码 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>RequestMapping.jsp</h2>
<hr/>
<form action="multi" method="get">
<input type="submit" value="multi">
</form>
<hr/>
<form action="myRequestMapping/mtd" method="get">
<input type="submit" value="/myRequestMapping/mtd">
</form>
<hr/>
<form action="myRequestMapping/params" method="get">
<input type="text" name="name"/>
<input type="text" name="pwd"/>
<input type="submit" value="/myRequestMapping/params">
</form>
<hr/>
<form action="myRequestMapping/headers" method="get">
<input type="submit" value="/myRequestMapping/headers">
</form>
<hr/>
<form action="myRequestMapping/pathVariable/10/listao" method="get">
<input type="submit" value="@PathVariable">
</form>
</body>
</html>
1. @GetMapping
- 作用:指定当前单元方法的请求方式只可以是get请求
- 属性:和
@RequestMapping
中属性一致
2. @PostMapping
- 作用:指定当前单元方法的请求方式只可以是post请求
- 属性:和
@RequestMapping
中属性一致
2. @RequestParam
- 作用:把请求中指定名称的参数给控制器中的形参赋值
- 属性
value
:请求参数中的名称required
:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错
/**
* mvc获取参数。解耦合参数注入
* 1. 形参名必须和实参名一致
* 2. 不一致用`@RequestParam`获取
* 3. 类型自动转换
*/
@RequestMapping("/mvc")
public String mvc(String name, @RequestParam("password") Integer pwd) {
System.out.println("name = " + name);
System.out.println("pwd = " + pwd);
return name + ", " + pwd;
}
3. @PathVariable
- 作用
- 用于绑定url中的占位符。eg:请求 url 中
/delete/{id}
。 Spring3.0之后url支持占位符。是SpringMVC支持REST风格URL的一个重要标志
- 用于绑定url中的占位符。eg:请求 url 中
- 属性
value
:用于指定url中占位符名称required
:是否必须提供占位符
@RequestMapping(value = "/restFul/{id}", method = RequestMethod.GET)
public String get(@PathVariable(value = "id") Integer id) {
System.out.println("testGET, id:" + id);
return "get_RESTful";
}
4. @RequestHeader
- 作用:用于获取请求消息头
- 属性
value
:提供消息头名称required
:是否必须有此消息头
@RequestMapping("/requestHeader")
public String requestHeader(@RequestHeader(value = "Accept", required = false) String requestHeader) {
System.out.println("requestHeader = " + requestHeader);
return requestHeader;
}
5. @RequestBody
- 作用:用于获取请求体json字符串。get请求方式不适用
$(function () {
$("#btn").click(function () {
var jsonObj = {pname: "jsonObj", petName: "petName"};
var jsonObjStr = JSON.stringify(jsonObj);
var formData = new FormData();
formData.append('pname', 'formData')
formData.append('petName', 'petName')
console.error(jsonObj)
console.error(jsonObjStr)
console.error(formData)
$.ajax({
type: "post",
url: "requestBody",
// data: jsonObj,
data: jsonObjStr,
// data: formData,
// processData: false,
// contentType: false,
contentType: "application/json",
// contentType: "application/x-www-form-urlencoded",
// contentType: "multipart/form-data; boundary=<calculated when request is sent>",
})
})
})
@RequestMapping("/requestBody")
public String requestBody(@RequestBody Person person, Pet pet) {
System.out.println("person = " + person);
System.out.println("pet = " + pet);
return person + " ------- " + pet;
}
6. @RestController
- 作用:只可以类上。该类中所有单元方法均是json响应。相当于
@ResponseBody
+@Controller
- 属性:和
@Controller
中一样
7. @JsonFormat
- 作用:响应json数据处理
- 属性
pattern
:指定响应时间日期的格式Timezone
:指定响应时区,否则有8小时时差
// 请求日期格式化
@DateTimeFormat(pattern = "yyyy-MM-dd")
// 响应日期格式化
@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
private Date birth;
8. @CookieValue
- 作用:用于把指定cookie名称的值传入控制器方法参数
- 属性
value
:指定cookie中的keyrequired
:是否必须有此cookie
@RequestMapping("/cookie")
public String cookie(@CookieValue(value = "JSESSIONID", required = false) String cookieValue) {
System.out.println(cookieValue);
return cookieValue;
}
9. @CrossOrigin
什么是跨域?
- 同源策略(SameOriginPolicy)是一种约定,是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
- 同源策略会阻止一个域的 JS 脚本和另外一个域的内容进行交互
- 所谓同源(即指在同一个域)就是两个页面具有相同
- 协议(protocol)
- 主机(host)
- 端口号(port)
http://127.0.0.1:8080/listao/index.jsp
(基础)https://127.0.0.1:8080/listao/index.jsp
(协议不一样)http://127.0.0.2:8080/listao/index.jsp
(IP不一致)http://127.0.0.1:8888/listao/index.jsp
(端口不一致)http://localhost:8080/listao/index.jsp
(IP不一致)
- 作用:解决ajax请求之间的跨域问题
- 属性:
origins
:允许可访问的域列表maxAge
:准备响应前的缓存持续的最大时间(以秒为单位)
@CrossOrigin(origins = "http://domain.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@GetMapping("/{id}")
public Account receive(@PathVariable Long id) {
}
}