gpt4 book ai didi

Spring Boot RestController : Intercept incoming requests

转载 作者:行者123 更新时间:2023-12-02 17:24:59 25 4
gpt4 key购买 nike

我目前正在编写某种框架,允许其他人为其编写 REST Controller 。当然,我希望那些“其他人”尽可能少地与我的代码中发生的事情进行交互。

具体来说,我想要并且需要访问请求数据(即在请求由其余 Controller 处理之前的 RequestEntity 。在 Controller 处理请求之前“拦截”请求,然后才让 Controller 处理它。

考虑以下代码:

@RestController
@RequestMapping("/")
public class MyController {

@GetMapping("/")
@ResponseBody
public ResponseEntity<String> getSomething(RequestEntity requestEntity) {

MyClass.doStuffWithRequestEntity(requestEntity);
// ...

现在我需要的是调用 ExternalClass.doStuffWithRequestEntity(requestEntity); 而无需显式调用它。是否可以在某个类中调用某些方法(将 RequestEntity 传递给它!)而不必显式调用它?

此外,所述拦截器类应该创建并配置一个对象,然后该对象再次可供其余 Controller 使用。

我会想类似的事情

class RestController {
@RestController
@RequestMapping("/")
public class MyController {

@GetMapping("/")
@ResponseBody
public ResponseEntity<String> getSomething() {

MyClass x = MyClass.getInstanceCreatedByInterceptor();
}
}
}

class Interceptor {
public void doStuffWithRequestEntity(requestEntity) {

MyClass x = new MyClass();
x.fillObjectWithData();
}
}

之前被执行过。

这个想法是,每个(!)传入请求都会被解析,并且其内容会被解码,而其余 Controller 的程序员根本不必关心这一点。他们应该只通过/从 MyClass 实例访问数据。

有办法做到这一点吗?

最佳答案

Spring-boot 允许我们配置自定义拦截器。通常在 Spring Boot 应用程序中,所有内容都是自动配置的,在这种情况下,我们可以使用 WebMvcConfigurerAdapter自定义它。只需扩展 WebMvcConfigurerAdapter 并在此类中提供所需的配置即可。

记得添加@Configuration注解,以便Spring在组件扫描期间拾取该类。

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

@Autowired
HandlerInterceptor customInjectedInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(...)
...
registry.addInterceptor(customInjectedInterceptor).addPathPatterns("/**");
}
}

这就是您通常向 Spring Boot 应用程序添加拦截器的方式。希望这可以帮助回答您的问题。

从 spring 5.x.x 或 spring-boot 2 开始WebMvcConfigurerAdapter 被标记为已弃用。WebMvcConfigurer 接口(interface)(由抽象类 WebMvcConfigurerAdapter),从 Spring 5 开始,包含其所有方法的默认实现。因此,抽象适配器类被标记为已弃用。如果您愿意,可以采用它,如下所示:

@Configuration
public WebConfig implements WebMvcConfigurer {
// ...
}

关于Spring Boot RestController : Intercept incoming requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com