Home > Mobile >  Spring Boot: Custom exception or Validation for file uploading?
Spring Boot: Custom exception or Validation for file uploading?

Time:07-21

For my file (csv) upload endpoint, I check the file type using a method in my CsvHelper class:

private static String[] TYPES =  {"text/csv", "application/vnd.ms-excel"};

public static boolean hasCsvFormat(MultipartFile file) {
    return Arrays.stream(TYPES).anyMatch(file.getContentType()::equals);
}

And call it from service as shown below:

public void create(MultipartFile file) throws Exception {
    if (!CsvHelper.hasCsvFormat(file)) {
        throw new NotValidFormatException(...);
    }
    // ...
}

I created a custom exception for this called NotValidFormatException using @ControllerAdvice, but I am not sure if it is the most proper way for this.

My questions:

1. Should I create custom exception or custom validator as mentioned on this? But as I have not a model field, I need to use @Valid on the request and not sure if I can use that approach to verify file type (by calling my hasCsvFormat() method.

2. I used this approach for creating custom exception handling. If I wanted to use that approach for this scenario, should I create a separate class (e.g. NotValidFormatException) like NoSuchElementFoundException on that example? Or should I include a new exception method to the GlobalExceptionHandler class as a common exception type?

CodePudding user response:

Based on your requirement, option number 2 is more suitable from my perspective.

You can create separate class for NotValidFormatException , annotate with ResponseStatus of your need & extend it with RuntimeException.

Now, your GlobalExceptionHandler is general purpose handler which perform actions once specific exception is thrown.

So you have to create method which should annotate with @ExceptionHandler(NotValidFormatException.class) in GlobalExceptionHandler .

Benefits of having separate class for NotValidFormatException is you can customize error message, can perform more operation within methods of that class.

If your requirement is minimal(like logging & returning response etc.) , then I would suggest to have only single ExceptionHandler method in GlobalExceptionHandler which will handle most of exceptions i.e. logging & returning response.

  • Related