Допустим, у меня есть объект с двумя полями, которые следует проверить:
public class AnyRQ {
@MerchantAccountValidation
@JsonProperty(value = "merchant-account")
private MerchantAccount merchantAccount;
@RequestIdValidation
@JsonProperty(value = "request-id")
private String requestId;
}
Обе аннотации @MerchantAccountValidation
и @RequestIdValidation
реализуют ConstraintValidator
и включают правила, которые должны быть действительными или не. (Просто покажите один класс)
public class RequestIdValidator
implements ConstraintValidator<RequestIdValidation, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return value != null && value.length() > 10;
}
}
Теперь у меня есть контроллер с двумя конечными точками. Конечная точка 1 должна проверять оба поля, а запрос 2 должен просто проверять requestId
.
@RestController
@RequestMapping("/validate")
public class ValidController {
@PostMapping("/endpoint1")
public ResponseEntity<?> register(@Valid @RequestBody AnyRQ req, Errors errors) {
if (errors.hasErrors()) {
}
return null;
}
@PostMapping("/endpoint2")
public ResponseEntity<?> authorization(@Valid @RequestBody AnyRQ req, Errors errors) {
if (errors.hasErrors()) {
}
return null;
}
}
Есть ли способ добиться определенного приоритета или наследования, чтобы заставить это работать? Я думал о том, чтобы иметь аннотацию проверки на уровне метода конечных точек. Но, к сожалению, это не работает.