nir*_*air 2 java spring spring-boot
我有一个看起来像这样的DTO:
class VehicleDto {
private String type;
private Car car;
private Bike bike;
}
Run Code Online (Sandbox Code Playgroud)
现在根据类型,我需要验证至少一个汽车和自行车.
两者都不能出现在同一个请求中.
我怎样才能做到这一点?
在课堂上有两个领域,而其中只有一个可以出现,对我来说似乎是一种设计气味.但如果你坚持这样的设计 - 你可以为你的班级创建一个自定义的验证器VehicleDto.
public class VehicleValidator implements Validator {
public boolean supports(Class clazz) {
return VehicleDto.class.equals(clazz);
}
public void validate(Object obj, Errors errors) {
VehicleDto dto = (VehicleDto) obj;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "type",
"error.message.for.type.field");
if (null != dto.getType()
&& null != dto.getCar()
&& null != dto.getBike()) {
switch(dto.getType()) {
case "car":
errors.rejectValue("bike", "error.message.for.bike.field");
break;
case "bike":
errors.rejectValue("car", "error.message.for.car.field");
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,请参阅有关验证的Spring文档:
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |