Spring boot - 将参数从拦截器传递到控制器中的方法

作者:编程家 分类: spring 时间:2025-09-11

使用拦截器将参数传递到Spring Boot控制器的方法是一种常见的需求。拦截器是Spring框架提供的一种机制,用于在请求到达控制器之前或之后执行一些额外的操作,比如参数验证、日志记录等。本文将介绍如何通过拦截器将参数传递到控制器的方法,并提供一个实际的案例来演示。

在Spring Boot中,我们可以使用自定义的拦截器来实现参数传递。首先,我们需要创建一个实现了HandlerInterceptor接口的拦截器类。该接口定义了三个方法:preHandle、postHandle和afterCompletion。其中,preHandle方法在请求到达控制器之前被调用,postHandle方法在控制器方法执行之后被调用,afterCompletion方法在整个请求完成之后被调用。

在preHandle方法中,我们可以获取到请求的参数,并将其保存到拦截器的上下文中。在postHandle方法中,我们可以从拦截器的上下文中获取到之前保存的参数,并将其传递给控制器的方法。

下面是一个简单的示例代码,演示了如何通过拦截器将参数传递到控制器的方法。

java

// 自定义拦截器类

public class MyInterceptor implements HandlerInterceptor {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

// 获取请求参数

String param = request.getParameter("param");

// 将参数保存到拦截器的上下文中

request.setAttribute("param", param);

return true;

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

// 从拦截器的上下文中获取之前保存的参数

String param = (String) request.getAttribute("param");

// 将参数传递给控制器的方法

modelAndView.addObject("param", param);

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

// 清除拦截器的上下文

request.removeAttribute("param");

}

}

@RestController

public class MyController {

@GetMapping("/test")

public String test(@RequestParam("param") String param) {

// 在控制器方法中使用参数

return "参数:" + param;

}

}

@Configuration

public class WebConfig implements WebMvcConfigurer {

@Autowired

private MyInterceptor myInterceptor;

@Override

public void addInterceptors(InterceptorRegistry registry) {

// 注册拦截器

registry.addInterceptor(myInterceptor);

}

}

在上面的示例中,我们创建了一个名为MyInterceptor的拦截器类,并实现了HandlerInterceptor接口的方法。在preHandle方法中,我们从请求中获取了参数并保存到拦截器的上下文中。在postHandle方法中,我们从拦截器的上下文中获取之前保存的参数,并将其传递给控制器的方法。最后,在afterCompletion方法中,我们清除了拦截器的上下文。

在控制器类中,我们使用了@GetMapping注解来映射请求路径为"/test"的GET请求,并通过@RequestParam注解将请求参数绑定到方法的参数中。在方法体中,我们使用了获取到的参数进行处理,并返回结果。

为了让Spring Boot应用使用我们自定义的拦截器,我们还需要创建一个配置类,并实现WebMvcConfigurer接口的addInterceptors方法。在该方法中,我们将我们的拦截器注册到拦截器注册表中。

通过拦截器将参数传递到Spring Boot控制器的方法是一种常见的需求。在本文中,我们介绍了如何使用自定义的拦截器来实现参数传递,并提供了一个实际的案例来演示。通过这种方式,我们可以在拦截器中获取到请求的参数,并将其传递给控制器的方法,实现更灵活的参数处理。

希望本文对你有所帮助,如果有任何问题,请随时留言。