Java 弹簧靴->;为什么我不需要捕获服务中的异常?

Java 弹簧靴->;为什么我不需要捕获服务中的异常?,java,spring,spring-boot,exception,methods,Java,Spring,Spring Boot,Exception,Methods,我正在用SpringBoot构建一个RESTAPI,我不明白为什么我不必在一个方法中捕获我自己的异常 请查看代码的第一行重要行,此函数(isemptyfile)在第二行重要行抛出EmptyFileException 事实证明intellij并没有让我在第三行中捕捉到这个异常。 出于某种原因,我的例外只是去了别的地方, i、 e.当我使用junit调试ImageService的测试时,异常在到达第二行后直接进入测试方法 有人能向我解释这种行为吗?我如何正确处理这个异常 谢谢 这是代码-> @Se

我正在用SpringBoot构建一个RESTAPI,我不明白为什么我不必在一个方法中捕获我自己的异常

请查看代码的第一行重要行,此函数(isemptyfile)在第二行重要行抛出EmptyFileException

事实证明intellij并没有让我在第三行中捕捉到这个异常。 出于某种原因,我的例外只是去了别的地方, i、 e.当我使用junit调试ImageService的测试时,异常在到达第二行后直接进入测试方法

有人能向我解释这种行为吗?我如何正确处理这个异常

谢谢

这是代码->


@Service
public class ImageService {

    private final FileStore fileStore;
    private final UserService userService;

    @Autowired
    public ImageService(FileStore fileStore, UserService userService) {
        this.fileStore = fileStore;
        this.userService = userService;
    }

    public void uploadImageToS3(int userProfileId, MultipartFile file){
        try{
        isFileEmpty(file);  //***********FIRST_IMPORTANT_LINE***********

        isImage(file);

        User user = userService.getUser(userProfileId);

        Map<String,String> metadata = extractMetaData(file);

        String path = MessageFormat.format("{0}/{1}", BucketName.PROFILE_IMAGE.getBucketName(),user.getId());
        String[] filenameArray = file.getOriginalFilename().split("\\.");
        String fileNameWithoutExtension = filenameArray[0];
        String extension = filenameArray[1];
        String fileName = MessageFormat.format("{0}-{1}.{2}",fileNameWithoutExtension,UUID.randomUUID(),extension);


            fileStore.save(path,fileName,Optional.of(metadata),file.getInputStream());
            //update user link -- filename
        }
        catch (IOException|UserNotFoundException e){
///***********THIRD_IMPORTANT_LINE***********
            throw new IllegalStateException(e);
        }
    }

    private void isFileEmpty(MultipartFile file){
        if(file == null || file.isEmpty()){
            throw new EmptyFileException("cannot upload empty file"); //***********SECOND_IMPORTANT_LINE***********
        }
    }
}


@服务
公共类图像服务{
私有最终文件存储文件存储;
专用最终用户服务用户服务;
@自动连线
公共图像服务(文件存储文件存储,用户服务用户服务){
this.fileStore=fileStore;
this.userService=userService;
}
public void uploadImageToS3(int-userProfileId,MultipartFile文件){
试一试{
isFileEmpty(文件);//*************第一行很重要***********
isImage(文件);
User=userService.getUser(userProfileId);
地图元数据=提取元数据(文件);
String path=MessageFormat.format(“{0}/{1}”,BucketName.PROFILE_IMAGE.getBucketName(),user.getId());
字符串[]filenameArray=file.getOriginalFilename().split(“\\”);
字符串fileNameWithoutExtension=filenameArray[0];
字符串扩展名=filenameArray[1];
字符串fileName=MessageFormat.format(“{0}-{1}.{2}”,文件名不带outextension,UUID.randomuid(),扩展名);
fileStore.save(路径、文件名、可选的.of(元数据)、file.getInputStream());
//更新用户链接--文件名
}
捕获(IOException | UserNotFoundException e){
///***********第三条重要路线***********
抛出新的非法状态异常(e);
}
}
私有void isFileEmpty(多部分文件){
if(file==null | | file.isEmpty()){
抛出新的EmptyFileException(“无法上载空文件”);//**********第二行***********
}
}
}
继承自
RuntimeException
,这是一个未经检查的异常。关于这一点,请参见JavaDocs,特别是这一行:

RuntimeException及其子类是未检查的异常。未检查的异常不需要在方法或构造函数的throws子句中声明,如果它们可以由方法或构造函数的执行抛出并在方法或构造函数边界之外传播


您可以了解更多关于“为什么”的信息