gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 20:52:14 26 4
gpt4 key购买 nike

想象我们有一个像这样的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com