如何验证 REST 服务中的通用 bean?

MrN*_*NVK 0 java validation spring spring-boot

在我当前的项目中,我经常使用批量请求。我有简单的BulkRequest<T>课程:

import java.util.List;

import javax.validation.constraints.NotNull;

public class BulkRequest<T> {

    @NotNull private List<T> requests;

    public List<T> getRequests() { return this.requests; }

    public void setRequests(List<T> requests) { this.requests = requests; }
}
Run Code Online (Sandbox Code Playgroud)

与其他 bean 一起使用非常简单,例如:

@RequestMapping(value = "/departments/{departmentId}/patterns",
                method = RequestMethod.POST,
                produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> post(
  final @PathVariable long departmentId,
  final @Valid @RequestBody BulkRequest<AddPatternRequest> bulkRequest
) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

AddPatternRequest 包含自己的验证规则,只代表一个请求,可以收集成批量请求:

import javax.validation.constraints.NotNull;

public class AddPatternRequest {

  @NotNull private Long pattern;

  public Long getPattern() { return this.pattern; }

  public void setPattern(Long pattern) { this.pattern = pattern; }
}
Run Code Online (Sandbox Code Playgroud)

但是有一个问题。控制器收到批量请求后,它只验证BulkRequest并检查requests集合是否null存在,但我也需要验证嵌套请求。

我该怎么做?

Sta*_*avL 5

将@Valid 添加到请求中。像这样

@NotNull 
@Valid
private List<T> requests;
Run Code Online (Sandbox Code Playgroud)

然后嵌套对象也被验证