gpt4 book ai didi

java - Spring @ComponentScan 排除/包含过滤器

转载 作者:搜寻专家 更新时间:2023-11-01 02:36:07 25 4
gpt4 key购买 nike

作为 Spring MVC 应用程序中的一个良好实践,Web 配置应该只选择“前端”组件,例如 @Controller@RestController
Root 应用程序上下文应选取其他每个 bean。

我已经将 Web 配置定义如下(请记住,我不需要 @EnableMvc 注释,因为它扩展了 WebMvcConfigurationSupport)

@Configuration
@ComponentScan(
basePackages = { ... },
useDefaultFilters = false,
includeFilters = @Filter({
Controller.class,
ControllerAdvice.class}))

Root配置如下。

@Configuration
@ComponentScan(
basePackages = { ... },
excludeFilters = @Filter({
Controller.class,
ControllerAdvice.class}))

我定义了两个 @RestControllerAdvice 类,第一个捕获所有通用的 Exception,第二个捕获更具体的 ServiceException.

当抛出 ServiceException 时,不会调用特定顾问,而只会选择通用顾问。基础包在两个配置类中是相同的。

我还需要在排除和包含过滤器上指定 RestControllerAdvice 吗?还是我遗漏了什么?

编辑:

两个 @RestControllerAdvice 都没有 basePackeges 或任何特定标准。而 ServiceException 确实被发现并注册了。

如果我将异常处理程序移动到工作处理程序而不是调用它。这就是我让它工作的方式。如果我将 ServiceException 处理程序移到一个单独的类中,它就不会再被调用。

@RestControllerAdvice
public class GlobalRestControllerAdviser extends ResponseEntityExceptionHandler {

@Override
protected ResponseEntity<Object> handleBindException(
final BindException ex,
final HttpHeaders headers,
final HttpStatus status,
final WebRequest request) {
return new ResponseEntity<Object>(
buildPresentableError(ex.getAllErrors().get(0)),
HttpStatus.BAD_REQUEST);
}

@ExceptionHandler(ServiceException.class)
protected Response<?> handleServiceException(final ServiceException e) {
...
}

@ExceptionHandler(Exception.class)
protected ResponseEntity<Object> handleGenericException(final Exception ex) {
...
}
}

似乎最通用的 ExceptionHandler 覆盖了更具体的。

最佳答案

差不多了,使用 FilterType type并分离过滤器。

@Configuration
@ComponentScan(
basePackages = { ... },
excludeFilters = {
@ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class),
@ComponentScan.Filter(type=FilterType.ANNOTATION, value=ControllerAdvice.class)
}
)

或者,我建议您创建自定义注释(例如 @FrontEnd)并对其应用过滤器。

关于java - Spring @ComponentScan 排除/包含过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51440348/

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