日常提交

This commit is contained in:
wu xiangkai
2022-11-29 16:41:45 +08:00
parent 56e693cfa0
commit fa8dd3f67f

View File

@@ -181,5 +181,100 @@ public void findPet(@PathVariable String petId) {
```shell ```shell
/cars;color=red,green;year=2012 /cars;color=red,green;year=2012
``` ```
当URL中预期含有Matrix变量时被映射方法的URI中必须含有一个URI Variable{var})来覆盖该Matrix变量即通过{var}来捕获URL中的Matrix变量以此确保URL能被正确的映射。例子如下所示
```java
// GET /pets/42;q=11;r=22
@GetMapping("/pets/{petId}")
public void findPet(@PathVariable String petId, @MatrixVariable int q) {
// petId == 42
// q == 11
}
```
在所有的path segment中都有可能含有matrix variable如果在不同path segment中含有相同名称的matrix variable可以通过如下方式进行区分
```java
// GET /owners/42;q=11/pets/21;q=22
@GetMapping("/owners/{ownerId}/pets/{petId}")
public void findPet(
@MatrixVariable(name="q", pathVar="ownerId") int q1,
@MatrixVariable(name="q", pathVar="petId") int q2) {
// q1 == 11
// q2 == 22
}
```
matrix variable参数也可以被设置为可选的并且也能为其指派一个默认值
```java
// GET /pets/42
@GetMapping("/pets/{petId}")
public void findPet(@MatrixVariable(required=false, defaultValue="1") int q) {
// q == 1
}
```
如果要获取所有的Matrix Variable并且将其缓存到一个map中可以通过如下方式
```java
// GET /owners/42;q=11;r=12/pets/21;q=22;s=23
@GetMapping("/owners/{ownerId}/pets/{petId}")
public void findPet(
@MatrixVariable MultiValueMap<String, String> matrixVars,
@MatrixVariable(pathVar="petId") MultiValueMap<String, String> petMatrixVars) {
// matrixVars: ["q" : [11,22], "r" : 12, "s" : 23]
// petMatrixVars: ["q" : 22, "s" : 23]
}
```
#### @RequestParam
@RequestParam注解用于将http request中的param赋值给handler method的参数使用方法如下
```java
@GetMapping
public String setupForm(@RequestParam("petId") int petId, Model model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
```
@RequestParam注解的参数类型不是String时,类型转换会被自动的执行。
@RequestParam注解的参数类型指定为list或array时会将具有相同param name的多个param value解析到其中。
可以用@RequestParam来注解一个Map<String,String>或MultiValValue<String,String>类型,不要指定@RequestParam属性此时map将会被自动注入。
#### @RequestHeader
可以通过@RequestHeader注解来将http header值赋值给handler method参数。
```shell
# http header
Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
```
可以通过如下方式来获取header中的值
```java
@GetMapping("/demo")
public void handle(
@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) {
//...
}
```
同样的如果被注解参数的类型不是String类型转换将会被自动执行。
同样,也可以用@RequestHeader注解来标注Map<String,String>或MultiValueMap<String,String>或HttpHeaders类型参数map会自动被header name和header value注入。
#### @CookieValue
可以通过@CookieValue注解将Http Cookie赋值给handler method参数如果存在如下Cookie
```cookie
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
```
可以通过如下方式来获取cookie的值
```java
@GetMapping("/demo")
public void handle(@CookieValue("JSESSIONID") String cookie) {
//...
}
```
如果注解标注参数的类型不是String会自动执行类型转换。