programing

중첩된 개체에 대한 Javax 유효성 검사 - 작동하지 않음

megabox 2023. 2. 11. 09:05
반응형

중첩된 개체에 대한 Javax 유효성 검사 - 작동하지 않음

Spring Boot 프로젝트에서는 LocationDto와 BuildingDto의 2개의 DTO를 검증하려고 합니다.LocationDto에는 BuildingDto 유형의 중첩된 개체가 있습니다.

DTO는 다음과 같습니다.

로케이션 DTO

public class LocationDto {

  @NotNull(groups = { Existing.class })
  @Null(groups = { New.class })
  @Getter
  @Setter
  private Integer id;

  @NotNull(groups = { New.class, Existing.class })
  @Getter
  @Setter
  private String name;

  @NotNull(groups = { New.class, Existing.class, LocationGroup.class })
  @Getter
  @Setter
  private BuildingDto building;

  @NotNull(groups = { Existing.class })
  @Getter
  @Setter
  private Integer lockVersion;

}

BuildingDto

public class BuildingDto {

  @NotNull(groups = { Existing.class, LocationGroup.class })
  @Null(groups = { New.class })
  @Getter
  @Setter
  private Integer id;

  @NotNull(groups = { New.class, Existing.class })
  @Getter
  @Setter
  private String name;

  @NotNull(groups = { Existing.class })
  @Getter
  @Setter
  private List<LocationDto> locations;

  @NotNull(groups = { Existing.class })
  @Getter
  @Setter
  private Integer lockVersion;

}

현재, 나는 내 컴퓨터에서LocationDto그 속성은name그리고.buildingnull은 아니지만 빌딩 내부에 있는 속성 ID의 존재를 확인할 없습니다.

를 사용하는 경우@Valid에 대한 주석building모든 필드를 검증합니다만, 이 경우는, 그 필드만을 검증하고 싶습니다.id.

javax validation을 사용하여 어떻게 할 수 있을까요?

이것은 내 컨트롤러입니다.

@PostMapping
public LocationDto createLocation(@Validated({ New.class, LocationGroup.class }) @RequestBody LocationDto location) {
  // save entity here...
}

올바른 요청 본문입니다. (검증 오류를 발생시키지 마십시오.)

{
  "name": "Room 44",
  "building": {
    "id": 1
  }
}

잘못된 요청 본문입니다. (빌딩 ID가 누락되었기 때문에 유효성 검사 오류를 던져야 합니다.)

{
  "name": "Room 44",
  "building": { }
}

추가해 보세요.@valid콜렉션에 접속합니다.참조에 따라 동면 상태로 동작합니다.

  @Getter
  @Setter
  @Valid
  @NotNull(groups = { Existing.class })
  private List<LocationDto> locations;

@유효한 주석을 캐스케이드 클래스 속성에 추가해야 합니다.

위치DTO 클래스

public class LocationDto {

  @Valid
  private BuildingDto building;
   
  .........

}

Bean Validation 1.1(JSR-349)부터 사용합니다.

새로운 검증 그룹을 소개합니다.Pk.class에 추가합니다.groupsBuildingDto:

public class BuildingDto {

    @NotNull(groups = {Pk.class, Existing.class, LocationGroup.class})
    // Other constraints
    private Integer id;

    //
}

그리고 나서LocationDto다음과 같이 캐스케이드됩니다.

@Valid
@ConvertGroup.List( {
    @ConvertGroup(from=New.class, to=Pk.class),
    @ConvertGroup(from=LocationGroup.class, to=Pk.class)
} )
// Other constraints
private BuildingDto building;

상세 정보:

5.5. Hibernate Validator 참조로부터의 그룹 변환.

언급URL : https://stackoverflow.com/questions/53999226/javax-validation-on-nested-objects-not-working

반응형