Issue
I stumbled upon a configuration class for a project that was converted from legacy spring to Spring Boot. I see there are two ways interceptors are added. Like these
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor( new MyInterceptorOne()).addPathPatterns("/api/data/**");
}
@Bean
public MappedInterceptor mappedResponseHeaderInterceptor() {
return new MappedInterceptor(new String[] { "/static/css/**", "/static/img/**" }, new ResponseHeaderInterceptor());
}
}
both interceptors are working. I am wondering what is right way to add the interceptors in Spring boot and why these two method exists
Solution
Basically they are the same.
registry.addInterceptor( new MyInterceptorOne()).addPathPatterns("/api/data/**");
Will internally use the MappedInterceptor
to register the HandlerInterceptor
with the given URL pattern.
Now the registration of a HandlerInterceptor
(which MappedInterceptor
implements) as an @Bean
works because Spring Boot (not plain Spring!) detects HandlerInterceptor
beans in the context and automatically registers them for you. This won't work in a regular Spring application.
So the way to use is to use the InterceptorRegistry
as that is the documented way and the MappedInterceptor
is more of an internal support class.
Answered By - M. Deinum