DTOに囲まれたDTO検証方法
4569 ワード
@Valid検証の使用
スプリングを使用する場合は@Valid宣言を使用して検証し、プロジェクトを行う場合はimbeddyタイプのdtoオブジェクトを検証する必要がある場合があります.
例は次のとおりです.
コントローラからPOSTリクエストが発行されると、以下のように@Valid名が表示されます.
@PostMapping("/newProduct")
public void uploadNewProduct(@RequestBody @Valid ProductRequestDto productReqeustDto,
BindingResult bindingResult) {
ProductRequestDtoはDaumに等しい.@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
public class ProductRequestDto {
@NotBlank(message = "상품 이름은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String name;
@NotBlank(message = "상품 설명은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String description;
private DeliveryRequestDto delivery;
private List<OptionRequestDto> options;
前述したように、ProductRequestDtoはDeliveryRequestDtoとOptionRequestDtoを有する埋め込みタイプである.public class DeliveryRequestDto {
@NotBlank(message = "배송 타입은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String type;
@NotBlank(message = "마감 시간은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String closing;
private int price;
}
public class OptionRequestDto {
@NotBlank(message = "옵션 이름은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String name;
private int price;
private int stock;
}
両方のクラスで検証が必要です.ただし,@Valid宣言はProductRequestにのみ関連しているため,2種類の検証は行われない.
解決策
public class ProductRequestDto {
@NotBlank(message = "상품 이름은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String name;
@NotBlank(message = "상품 설명은 공백일 수 없습니다.", groups = PostValidationGroup.class)
private String description;
@Valid
private DeliveryRequestDto delivery;
@Valid
private List<OptionRequestDto> options;
ProductRequestDtoのDtoオブジェクトに@Validを貼り付けます.Reference
この問題について(DTOに囲まれたDTO検証方法), 我々は、より多くの情報をここで見つけました https://velog.io/@davidko/DTO가-감싼-DTO-유효성-검사-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol