来自@ControllerAdvice的Spring basePackageClasses不起作用

时间:2017-07-13 07:45:41

标签: java spring exception-handling

我有定义

@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无法正常工作。

如果我的@ControllerAdvice工作正常ExceptionHandler,那么

有什么问题?我想将ExceptionHandler仅用于课程MyClass

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

如果您使用的是Spring Boot,请注意,默认情况下,Spring Boot仅扫描bootstrap类的包和子包下的bean。

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