java - Spring MVC @Controller 拦截自己的请求

标签 java spring spring-mvc spring-restcontroller

想象我们有一个像这样的 Controller :

@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 */
    }
}

问题是,如何以与 @ExceptionHandler 类似的方式为该特定 Controller 实现一些常见的前/后处理?例如。我想在 Controller 中有一个方法,它在处理程序方法之前接收请求,但仅请求此特定 Controller 。

我知道 RequestBodyAdviceResponseBodyAdvice 接口(interface),但想要 Controller 本地的东西。

作为一个使用示例 - 我想在每个处理程序之前对公共(public) parameter 变量进行一些验证。

最佳答案

上面遗漏的答案是如何为特定 Controller 注册拦截器,可以按如下方式完成:

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

在 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>

spring documentation

关于java - Spring MVC @Controller 拦截自己的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097915/

相关文章:

spring - 对 Spring GenericBeanDefinition 的引用

java - Spring : Error setting property values; nested exception is org. springframework.beans.NotWritablePropertyException

java - 在 Mac 上添加 javax.comm API

java - 如何使用LDAP登录网站

java - 我可以为 EJB 使用 CDI 构造函数注入(inject)吗?

java - JPA+ Spring : Mapping a foreign key column to a ID based on the value received before persisting the entity

java - CXF 提供静态 html

java - 如何重写扩展类的子方法

java - UTF字符串到InputStream的转换

java - Android - Jetpack 导航