MultipartFile的自定义约束验证批注

时间:2020-10-22 00:17:17

标签: java spring spring-boot spring-mvc

我正在尝试做一个注释以验证控制器参数上的MultipartFile列表,但似乎没有任何效果。没有抛出异常,根本没有错误。 我看了一些类似的问题,但是没有用。

  • 接口:

    @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 {};
    }
    
  • 班级:

    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);
      }
    }
    
  • 用法:

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

1 个答案:

答案 0 :(得分:0)

您需要像这样在控制器类上使用flutter run

@Validated
相关问题