如何在List请求体上应用@Validated?

问题描述 投票:0回答:1

鉴于:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class VocabularyRequest {
  @Null(groups = CollectionCreation.class)
  @NotNull(groups = VocabularyCreation.class)
  private Long collectionId;

  @Valid private List<MeaningVariantRequest> meaningVariants;
}

这个

@Validated
有效:

  @PostMapping(consumes = APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.CREATED)
  @Override
  public Mono<VocabularyResponse> create(
      @Validated(VocabularyCreation.class) @RequestBody VocabularyRequest request) {
    return super.create(request);
  }

但这(应用于

List
)不是:

  @PostMapping(value = "/bulk", consumes = APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.CREATED)
  @Validated(VocabularyCreation.class)
  public Flux<VocabularyResponse> createBatch(
      @RequestBody List<@Valid VocabularyRequest> requests) {
    return service(VocabularyService.class).createBatch(requests);
  }

改成这样,还是不行:

  @PostMapping(value = "/bulk", consumes = APPLICATION_JSON_VALUE)
  @ResponseStatus(HttpStatus.CREATED)
  public Flux<VocabularyResponse> createBatch(
      @Validated(VocabularyCreation.class) @RequestBody List<VocabularyRequest> requests) {
    return service(VocabularyService.class).createBatch(requests);
  }

如果更改为

@RequestBody List<@Validated(VocabularyCreation.class) VocabularyRequest> requests
,则会出现编译错误:

'@Validated' not applicable to type use

如标题,有解决办法吗?感谢您的帮助!!

java spring spring-boot validation jakarta-validation
1个回答
0
投票

您需要创建

VocabularyBulkRequest
,其中包含
VocabularyRequest
列表。

它会改变你的 API,但是将列表放在顶层无论如何都是不好的做法。

© www.soinside.com 2019 - 2024. All rights reserved.