중첩된 개체에 대한 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
그리고.building
null은 아니지만 빌딩 내부에 있는 속성 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
에 추가합니다.groups
의BuildingDto
:
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
'programing' 카테고리의 다른 글
테마 활성화 시 '주요 메뉴' 위치 메뉴 자동 설정 (0) | 2023.02.11 |
---|---|
Angular에 타사 Javascript 라이브러리 포함JS 앱 (0) | 2023.02.11 |
Wordpress에서 발췌한 태그 제거가 작동하지 않음 (0) | 2023.02.07 |
패브릭 JS _ updateObjectsCoords 대체 ? (1.7.9로의 이행 문제) (0) | 2023.02.07 |
Wordpress 테마를 "잘못된 상위 테마"로 만드는 이유는 무엇입니까? (0) | 2023.02.07 |