对嵌套对象进行 Javax 验证 - 不起作用
2022-09-01 18:04:16
在我的Spring Boot项目中,我有两个DTO,我正在尝试验证,LocationDto和BuildingDto。LocationDto 具有一个类型为 BuildingDto 的嵌套对象。
这些是我的 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;
}
建筑
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;
}
目前,我可以在我的中验证属性和不为空,但我无法验证建筑物内的属性ID是否存在。LocationDto
name
building
如果我在属性上使用注释,它将验证其所有字段,但对于这种情况,我只想验证其.@Valid
building
id
如何使用javax验证来完成?
这是我的控制器:
@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": { }
}