sco*_*rpp 1 java spring spring-mvc spring-restcontroller
想象一下我们有一个这样的控制器:
@RestController
@RequestMapping("/{parameter}")
public class MyController {
@ExceptionHandler(SomeException.class)
public Object handleSomeException() { /* handle */ }
@RequestMapping("/something")
public Object handleSomething(@PathVariable("parameter") String parameter) {
/* handle */
}
@RequestMapping("/somethingElse")
public Object handleSomethingElse(@PathVariable("parameter") String parameter) {
/* handle */
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如何以与@ExceptionHandler工作类似的方式为这个特定控制器实现一些常见的前\后处理?例如,我想在控制器中有一个方法,它在处理程序方法之前接收请求,但只对这个特定控制器的请求。
我知道RequestBodyAdvice和ResponseBodyAdvice接口,但想要控制器本地的东西。
作为使用示例 - 我想parameter在每个处理程序之前对公共变量进行一些验证。
以上所有问题的答案是如何为特定控制器注册拦截器,可以按如下方式完成:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor());
registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
}
}
Run Code Online (Sandbox Code Playgroud)
在 XML 中,相同:
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/admin/**"/>
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/secure/*"/>
<bean class="org.example.SecurityInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4047 次 |
| 最近记录: |