来自@ControllerAdvice的Spring basePackageClasses不起作用

问题描述 投票:1回答:2

我有定义

@ControllerAdvice(basePackageClasses = MyClass.class)
public class MyClassExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value = { MultipartException.class, FileUploadBase.FileSizeLimitExceededException.class })
    @ResponseBody
    protected ResponseEntity<Object> maximumFileSizeLimitExceeded(RuntimeException ex, WebRequest request) {

        String bodyOfResponse = "message";
        return new ResponseEntity<>(new RestErrorInfo(ex, bodyOfResponse), HttpStatus.BAD_REQUEST);

    }
}

如果我有@ControllerAdvice(basePackageClasses = MyClass.class)我的ExceptionHandler不正常。

如果我只是@ControllerAdvicemy ExceptionHandler工作正确。

问题是什么?我想把我的ExceptionHandler仅仅用于课堂MyClass

java spring exception-handling
2个回答
0
投票

使用@Controller注释而不是@ControllerAdvice,因为使用@ExceptionHandler,最后一个只能用于所有控制器(所以没有basePackageClasses = MyClass.class


0
投票

我通过将处理程序包添加到springboot扫描中来解决此问题。

@SpringBootApplication(scanBasePackages = "your.handler.package")

如果您使用的是spring boot,请注意,默认情况下,spring boot仅扫描引导类的包和子包下的bean。

因此,如果使用@ControllerAdvice注释的处理程序不在任何这些包中,则必须手动将其包添加到扫描中。

© www.soinside.com 2019 - 2024. All rights reserved.