Próbuję dokonać adnotacji w celu potwierdzenia listy MultipartFile na parametrach kontrolera, ale wydaje się, że nie ma żadnego efektu. Nie jest wyrzucony wyjątku, nie jest w ogóle błędu. Spojrzałem na podobne pytania, ale nie zadziałałem.

  • Berło:

    @Target(ElementType.PARAMETER)
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = {ImageValidator.class})
    public @interface ValidImage {
      String message() default "Invalid image file";
    
      Class<?>[] groups() default {};
    
      Class<? extends Payload>[] payload() default {};
    }
    
  • Klasa:

    public class ImageValidator implements ConstraintValidator<ValidImage, List<MultipartFile>> {
    
      @Override
      public boolean isValid(
          List<MultipartFile> listMultipartFile, ConstraintValidatorContext context) {
    
        for (var multipartFile : listMultipartFile) {
          var contentType = multipartFile.getContentType();
          if (!isSupportedContentType(contentType)) {
            context.disableDefaultConstraintViolation();
            context
                .buildConstraintViolationWithTemplate("Only JPG and PNG images are allowed.")
                .addConstraintViolation();
            return false;
          }
        }
    
        return true;
      }
    
      private boolean isSupportedContentType(String contentType) {
        var supportedContents = List.of("image/jpg", "image/jpeg", "image/png");
        return supportedContents.contains(contentType);
      }
    }
    
  • Stosowanie:

    @PostMapping(value = "images")
      public ResponseEntity<List<ExerciseImageDTO>> uploadImages(
          @RequestParam(value = "images", required = true) @ValidImage List<@Valid MultipartFile> images) {
    
        .......
        return ResponseEntity.ok(createdImages);
      }
    
0
Wally 22 październik 2020, 03:17

1 odpowiedź

Najlepsza odpowiedź

Potrzebujesz @Validated na takiej klasie kontrolera

    @Controller
    @Validated
    public class SampleController {

      @PostMapping(value = "images")
      public ResponseEntity<List<ExerciseImageDTO>> uploadImages(
      @RequestParam(value = "images", required = true) @ValidImage List<@Valid MultipartFile> images) {
        .......
        return ResponseEntity.ok(createdImages);
      }

    }
0
guchuan 22 październik 2020, 02:50