头头是道:揭示Spring MVC如何获取和处理请求头数据

Servlet API 方式

package world.xuewei.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;


/**
 * 第一个控制器
 *
 * @author 薛伟
 * @since 2023/10/30 16:18
 */
@Controller
public class HeaderController {

    @RequestMapping("/header")
    public String header(HttpServletRequest request) {
        String token = request.getHeader("Token");
        return "index";
    }
}

@RequestHeader 注解

@RequestHeader 注解是 SpringMVC 框架中的一个注解,用于从 HTTP 请求头中获取值并绑定到方法参数或模型属性上。

使用 @RequestHeader 注解时,你需要指定要获取的请求头的名称。当请求被处理时,SpringMVC 会自动解析请求头,并将对应名称的请求头值绑定到方法参数或模型属性上。

如果请求中不存在指定名称的 Header,headerValue 参数将会被设置为 null(如果指定了 required=false)或抛出异常(默认)(如果未指定 required=false)。

除了获取单个请求头的值外,@RequestHeader 注解还支持以下功能:

  1. 指定默认值:可以使用 defaultValue 属性为参数指定默认值,当请求中不存在指定名称的请求头时,将使用该默认值。
  2. 支持类型转换:@RequestHeader 注解可以将请求头的值转换为不同的类型,例如 intbooleanDate 等。如果无法转换,则会抛出异常。
  3. 属性绑定:可以使用 @RequestHeader 注解将请求头的值绑定到模型属性上,从而在视图中使用该属性。

需要注意的是,@RequestHeader 注解只能用于处理简单类型的请求头值。如果需要处理复杂的请求头结构,可以考虑使用 javax.servlet.http.HttpServletRequest 对象或自定义注解与拦截器来实现。

package world.xuewei.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;


/**
 * 第一个控制器
 *
 * @author 薛伟
 * @since 2023/10/30 16:18
 */
@Controller
public class HeaderController {

    @RequestMapping("/header")
    public String header(@RequestHeader("Token") String token) {
        System.out.println(token);
        return "index";
    }
}