Java @ControllerAdvice不';行不通

Java @ControllerAdvice不';行不通,java,spring,exception-handling,Java,Spring,Exception Handling,我有定义 @ControllerAdvice(basePackageClasses = MyClass.class) public class MyClassExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(value = { MultipartException.class, FileUploadBase.FileSizeLimitExceededException.class })

我有定义

@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)
公共类MyClassExceptionHandler扩展了ResponseEntityExceptionHandler{
@ExceptionHandler(值={MultipartException.class,FileUploadBase.fileSizeLimitExcepedException.class})
@应答器
受保护的响应MaximumFileSizeLimitExceed(RuntimeException ex,WebRequest请求){
字符串bodyOfResponse=“message”;
返回新的ResponseEntity(新的RestErrorInfo(例如,响应主体)、HttpStatus.BAD_请求);
}
}
如果我有
@ControllerAdvice(basePackageClasses=MyClass.class)
我的
异常处理程序
无法正常工作

如果我有
@ControllerAdvice
我的
异常处理程序
工作正常


有什么问题?我想将我的
异常处理程序
仅用于类
MyClass
使用
@Controller
注释而不是
@ControllerAdvice
,因为使用
@ExceptionHandler
后一个只能用于所有控制器(因此没有
basePackageClasses=MyClass.class

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

@SpringBootApplication(scanBasePackages = "your.handler.package")
如果您使用的是SpringBoot,请注意,默认情况下SpringBoot只扫描引导类的包和子包下的bean


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

什么是“我的异常处理程序工作不正常”?当我上载大小超过阈值的文件时,不要捕获异常。我刚刚收到内部服务器错误。如果我删除了
basePackageClasses
我的响应主体收到了错误。我如何才能捕获从我的类控制器收到的异常?我不想捕获最大文件大小的所有异常,只想捕获MyClass中的异常?就像您之前使用@ExceptionHandler时所做的那样:所以,您建议我将控制器中ExceptionHandler的方法从MyClass中移走?我尝试将控制器中的ExceptionHandler移动到与之相同的位置,但不起作用。请尝试遵循前面注释中的链接,我建议您这样做:1)您需要用@controller注释标记控制器,而不是异常类;2) 在控制器中移动异常方法;3) 创建ExceptionClass,就像普通Exception类一样,如链接中所示