获取 cookie:@CookieValue
@GetMapping("/getCookie")
public String getCookie(@CookieValue(value = "JSESSIONID") String jSessionId) {
return jSessionId;
}
获取 header:@RequestHeader
@GetMapping("/getHeader")
public String getHeader(@RequestHeader(value = "X-Custom-Header") String customHeader) {
return "Header Value: " + customHeader;
}
获取 url 单个查询字符串:@RequestParam
// http://localhost:8080/getQueryParam?param=value1
@GetMapping("/getQueryParam")
public String getQueryParam(@RequestParam(value = "param") String param) {
return "Query Parameter Value: " + param;
}
// 也可以不加注解
@GetMapping("/getQueryParam")
public String getQueryParam(String param) {
return "Query Parameter Value: " + param;
}
// 跟请求方式也无关
@PostMapping("/getQueryParam")
public String getQueryParam(String param) {
return "Query Parameter Value: " + param;
}
获取 url 路径参数:@PathVariable
// http://localhost:8080/users/1
@GetMapping("/users/{id}")
public String getQueryParam(@PathVariable("id") Long id) {
System.out.println(id);
}
// 和请求方式没关系
@PostMapping("/users/{id}")
public String getQueryParam(@PathVariable("id") Long id) {
System.out.println(id);
}
@RequestParam 、@CookieValue、@RequestHeader、@PathVariable 注解
四个家伙唯一的区别就是 @PathVariable 没有 defaultValue 属性
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
/**
* 这俩家伙互为别名
*/
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
// 是否必传(默认必传,不传会报错)可以改为 false 非必传
boolean required() default true;
// 可以指定默认值(@PathVariable 没有)
String defaultValue() default ValueConstants.DEFAULT_NONE;
}
获取 url 多个查询字符串
直接把对象怼在方法参数就行了,不需要注解
// http://localhost:8080/getUrlParm?key1=val1&key2=val2
@GetMapping("/getUrlParm")
public void postBody(UrlParm param) {
System.out.println(param);
}
@Data
public class UrlParam{
private String key1;
private String key2;
}
获取请求体
// @RequestBody 会把请求体转成 UrlParam 对象
@PostMapping("/postBody")
public void postBody(@RequestBody UrlParam body) {
System.out.println(body);
}
同时获取请求头和请求体
给 HttpEntity 指定不同的泛型,还会
@PostMapping("/data")
public void receiveData(@RequestBody HttpEntity<MyData> httpEntity) {
// 获取请求头,请求头是 HttpHeaders 对象
HttpHeaders headers = httpEntity.getHeaders();
// 获取请求体,请求体可以指定泛型
MyData myData = httpEntity.getBody();
System.out.println("Headers: " + headers);
System.out.println("Body: " + requestBody);
}
不常用的
- @RequestAttributes:获取 HttpServletRequest 请求域的数据
- @SessionAttributes:获取会话中的属性
- @MatrixVariable:获取 url 矩阵变量
使用原生 Servlet Api
直接把 HttpServletRequest 、HttpServletResponse、HttpSession 怼在方法参数就可以
@GetMapping("/getCookie")
public String getCookie(HttpServletRequest request) {
// 获取所有 cookies
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
// 找到指定名称的 cookie
if ("myCookieName".equals(cookie.getName())) {
return "Cookie Value: " + cookie.getValue();
}
}
}
return "Cookie not found";
}
标签:请求,处理,param,id,参数,public,getQueryParam,String
From: https://www.cnblogs.com/cyrushuang/p/18517516