Buduję reszta API z bootem wiosną i nie mogę dowiedzieć się, dlaczego nie muszę złapać własnych wyjątków w metodzie ..

Spójrz na First_important_line w kodzie, ta funkcja (ISEMPTYFILE) rzuca pustyFileException w sekund_importy_line .

Okazuje się, że Intellij nie sprawi, żebym złapał ten wyjątek w Third_important_line . Z jakiegoś powodu mój wyjątek po prostu dotrze gdzieś indziej, tj. Kiedy debuguję test imageervice z Junit, wyjątek przechodzi prosto do metody testowej po osiągnięciu sekund_portażu_line_line

Ktoś może mi wyjaśnić to zachowanie? i jak mogę prawidłowo poradzić sobie z tym wyjątkiem?

Dzięki!

Oto kod ->


@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***********
        }
    }
}

1
Gal Carmi 11 październik 2020, 17:03

1 odpowiedź

Najlepsza odpowiedź

NielegalnyStateException dziedziczy z RuntimeException , co jest niezaznaczonym wyjątkiem. Zobacz Javadocs za ten, w szczególności tej linii:

RuntimeException i jego podklasy są niezbędnymi wyjątkami. Niezłączne wyjątki nie muszą być zadeklarowane w metodzie lub klauzuli rzutu konstruktora, jeżeli można je wyrzucić przez wykonanie metody lub konstruktora i propagować poza metodą lub granicą konstruktora.

1
Mike Thomsen 11 październik 2020, 14:08