Spring MVC 获取请求的参数

获取 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";
}
posted @   CyrusHuang  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示