SpringBoot获取Request对象的3种方法!

目录

HttpServletRequest介绍

一、通过请求参数获取

二、通过 RequestContextHolder 获取

三、通过自动注入获取

常用方法

小结:

HttpServletRequest介绍

HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,HTTP请求中的所有信息会被转到HttpServletRequest通过这个Request方法可以获得客户端的所有信息、例如: 获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。

那么问题来了,在 Spring Boot 中,获取 Request 对象的方法有哪些?

常见的获取 Request 对象的方法有以下三种:

  1. 通过请求参数中获取 Request 对象;

  2. 通过 RequestContextHolder 获取 Request 对象;

  3. 通过自动注入获取 Request 对象。

一、通过请求参数获取

该方法实现的原理是 Controller 开始处理请求时,Spring 会将 Request 对象赋值到方法参数中,我们直接设置到参数中即可得到 Request 对象。

实现代码:

@PostMapping("/testMethod")
public void testMethod(HttpServletRequest request) {

    // 获取请求的 IP 地址
    String ipAddress = request.getRemoteAddr();
    System.out.println("ipAddress >>>> " + ipAddress);
    // do something
}

二、通过 RequestContextHolder 获取

在 Spring Boot 中,RequestContextHolder 是 Spring 框架提供的一个工具类,用于在多线程环境中存储和访问与当前线程相关的请求上下文信息。它主要用于将当前请求的信息存储在线程范围内,以便在不同的组件中共享和访问这些信息,特别是在没有直接传递参数的情况下。RequestContextHolder 的主要作用有以下几个:

  1. 访问请求上下文信息:在 Web 应用中,每个请求都会触发一个新的线程来处理。RequestContextHolder 允许你在任何地方获取当前请求的上下文信息,比如 HttpServletRequest 对象、会话信息等。

  2. 跨层传递信息:在多层架构中,比如控制器、服务层、数据访问层,你可能需要在这些层之间传递一些与请求相关的信息,但不想在每个方法中显式传递。通过 RequestContextHolder,你可以在一处设置请求信息,在其他地方获取并使用。

  3. 线程安全的上下文共享:RequestContextHolder 使用线程局部变量来存储请求上下文信息,确保在多线程环境下每个线程访问的上下文信息都是独立的,避免了线程安全问题。

因此我们可以使用 RequestContextHolde 获取 Request 对象,实现代码如下:

@PostMapping("/testMethod")
public void testMethod() {

    ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = servletRequestAttributes.getRequest();
    // 获取请求的 IP 地址
    String ipAddress = request.getRemoteAddr();
    System.out.println("ipAddress >>>> " + ipAddress);
    // do something
}

三、通过自动注入获取

HttpServletRequest 对象也可以通过自动注入,如属性注入的方式获取,如下代码所示:

@RestController
public class DemoController {

    @Autowired
    private HttpServletRequest request; // 自动注入 request 对象
     

    @PostMapping("/testMethod")
    public void testMethod() {
        // 获取请求的 IP 地址
        String ipAddress = request.getRemoteAddr();
        System.out.println("ipAddress >>>> " + ipAddress);
        // do something
    }
}

常用方法

  • getRequestURL():得到请求的URL
  • getHeader(String s):getHeader表示得到请求头,参数s表示想要获取请求头中的什么数据
  • getHeader("Host"):获取请求的主机
  • getHeader("Referer"):获取请求来自于哪里,一般用来做防盗链
  • getRemotetAddr():得到请求的ip
  • getParameter(String s):得到请求参数的值
  • getParameterValues(String s):得到请求参数的值,用于参数有多个值,返回一个数组

小结:

Request 对象是获取客户端 HTTP 请求的重要对象,也是 Spring Boot 的重要对象之一,获取此对象的常用方法有:通过请求参数获取、通过 RequestContextHolder 获取,以及通过注入获取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值