【发布时间】:2022-11-29 07:00:20
【问题描述】:
当在名为 Entries 的列表中传递 null 或没有值时,我希望响应状态为 400 BAD Request。 我创建了一个自定义验证 @ValidList 来实现这一点。但是,我得到的不是 400 BAD Request,而是 500 Internal Server Error 响应。我怎样才能解决这个问题?
我的班级结构:
public class RequestAPI{
@PostMapping(value = "/request",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity request(
@Valid @NotNull @RequestBody(required = false) Data data) { }
}
@ValidList
public class Data extends ArrayList<@Valid Entries> { }
public class Entries {
@NotNull
String firstName
@NotNull
String lastName
}
验证器类:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Constraint(validatedBy = ListValidator.class)
public @interface ValidList {
String message() default "List cannot empty or contain null values";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class ListValidator implements ConstraintValidator<ValidList, List<? extends Object>> {
@Override
public boolean isValid(List<? extends Object> list,
ConstraintValidatorContext context) {
return !(list == null || list.isEmpty() || list.stream().anyMatch(Objects::isNull));
// mark the list invalid is empty or contains any null values.
}
@Override
public void initialize(ValidList constraintAnnotation) {}
【问题讨论】:
标签: java spring-boot annotations