Spring: DTO 文件大小验证

Spring: DTO file size validation

考虑两种控制器端点方法:

@RestController
public class MyController {

  @PostMapping("/foo")
  public ResponseEntity<?> foo(@Valid @RequestBody FooDto dto) {
    // ..
  }

  @PostMapping("/bar")
  public ResponseEntity<?> bar(@Valid @RequestBody BarDto dto) {
    // ..
  }
}

实际的 dto 包含多部分对象,定义为:

class FooDto {

  @NotNull
  private MultipartFile file;

  @Size(min 2, max 40)
  private String name;
}

当然 BarDto 也是如此。


目前,最大文件大小在 Spring 属性中全局定义为:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

在理想情况下,我想从属性中控制每个单独的 dto 最大文件大小,例如如:

foo-dto.max-size=10MB
bar-dto.max-size=500MB

在不太理想的情况下,我想从 dto 内部控制大小 类,例如:

class BarDto {

  @FileSize(max = '500MB') // <-- something like this
  @NotNull
  private MultipartFile file;

  // ..
}

关于如何实现该目标的任何提示?是否存在用于文件验证的现有注释,与 Spring?

兼容

您可以通过 implementing ConstraintValidator<SizeConstraint, String> 创建自己的注释,例如 SizeConstraintValidator。在那里您可以验证任何参数,包括 MultiPartFile

的大小

查看更多here