2016-02-05 4 views
2

У меня есть куча контроллеров, таких как:как перехватить все запросы весной контроллеры REST?

@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); 
    } 

} 

, что я делаю не так или я что-то отсутствует?

ответ

1

так, видимо, я делаю что-то неправильно, но не могу сказать, что,

определение перехватчика типа:

<mvc:interceptors> 
    <bean class="com.test.ControllerInterceptor" /> 
</mvc:interceptors> 

Я уверен, что вы также можете определить его в чистом Java, но это работает,

ответ найден в: http://viralpatel.net/blogs/spring-mvc-interceptor-example/

0

Возможно вам не хватает

выполните картирование
registry.addInterceptor(getControllerInterceptor()).addPathPatterns("/**"); 

И, как я знаю, что вы не должны использовать

super.addInterceptors(registry); 
+0

NOP, я пытался это тоже, но то же самое :( –

+0

Является ли эта весна загрузка или просто приложение Spring MVC? И если вы можете использовать код вашего перехватчика. – PawelN

+0

в начале это был springBoot, но мы сталкиваемся с некоторыми проблемами, и теперь это простая весна. –

1

ваш Interceptor класс ControllerInterceptor не является контекст приложения управляемый компонент. Убедитесь, что вы добавили аннотацию @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 { 
// ... 
} 
Смежные вопросы