java - 如何拦截 spring REST Controller 中的所有请求?

标签 java spring rest

我有一堆 Controller ,例如:

@RestController
public class AreaController {
    @RequestMapping(value = "/area", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<Area> get(@RequestParam(value = "id", required = true) Serializable id) { ... }
}

我需要拦截所有到达它们的请求,

我像这个例子创建了一个拦截器:

http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/

但它永远不会进入:(

因为我只使用注释,所以我没有 XML 来定义拦截器, 我发现它是这样设置的:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.test.app")
public class AppConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ControllerInterceptor getControllerInterceptor() {
        ControllerInterceptor c = new ControllerInterceptor();
        return c;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getControllerInterceptor());
        super.addInterceptors(registry);
    }

}

我做错了什么或者我错过了什么?

最佳答案

您的 InterceptorControllerInterceptor 不是应用程序上下文管理的 bean。确保将 @Component 注释放在 ControllerInterceptor 上并将其包添加到 @ComponentScan。因此,假设您的 ControllerInterceptor 位于包 com.xyz.interceptors 中,例如:

package com.xyz.interceptors;  //this is your package

@Component //put this annotation here
public class ControllerInterceptor extends HandlerInterceptorAdapter{
 // code here
}

并且您的 AppConfig 变为:

@ComponentScan(basePackages = { "com.test.app", "com.xyz.interceptors" })
public class AppConfig extends WebMvcConfigurerAdapter {
// ...
}

关于java - 如何拦截 spring REST Controller 中的所有请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35232597/

相关文章:

spring - 在 Tomcat 中的上下文之间转发请求

spring - 如何使用 OAuth2RestTemplate?

java - RxJava 忽略 onNext

java - 当 Android fragment onCallBack 带有数据时出现 NullPointerException

java - 如何处理 Java Web 应用程序中的异常?

java - 通过 JDBC/JPA 在 PostgreSQL 中更新插入(更新+插入)返回奇怪的行计数

java - 如何使用 Spring Boot 测试 jwt.*?

java - netbeans 中的调试类路径在哪里/spring 配置 XML 文件在哪里?

java - Jersey @Path 用于同一类中的复数/单个 REST 名词

rest - JavaEE 示例 FirstCup dukesAge 的问题