使用 @Validated
会无法校验入参的列表属性(内部元素的注解),可以使用 Validation
提供 的静态方法。下面是使用示例。
-
@PostMapping("/createBatteryScheme") CommonResponse<Object> createBatteryScheme(@RequestBody BatterySchemeCreateParam param) { //使用Validation提供的静态方法进行校验 Set<ConstraintViolation<BatterySchemeCreateParam>> validate = Validation.buildDefaultValidatorFactory().getValidator().validate(param); //若vaildate集合大于0,表示有不通过的校验结果。 if (validate.size() > 0) { return CommonResponse.fail(validate.iterator().next().getMessage()); } baseConfigService.createBatteryScheme(param); return CommonResponse.success(); }
这里给出BatterySchemeCreateParam
的具体结构
-
@Data public class BatterySchemeCreateParam { @NotNull @Schema(title = "景区ID") private String schoolId; @NotBlank @Schema(title = "方案名称") private String schemeName; @Schema(title = "备注") private String remarks; //@Validated注解是无法处理列表内部元素的校验注解的 @Schema(title = "电量方案配置") private List<BatterySchemeProfileDto> batterySchemeProfileDto; }
-
@Data public class BatterySchemeProfileDto { @PositiveOrZero @NotNull @Schema(title = "最小电压(伏特)") private Float minVoltage; @PositiveOrZero @NotNull @Schema(title = "最大电压(伏特)") private Float maxVoltage; @Max(100) @PositiveOrZero @NotNull @Schema(title = "在此电压区间(min~max)对应的电量(%)") private Float batteryPercentage; @PositiveOrZero @NotNull @Schema(title = "续航里程(千米)") private Float mileage; }