У меня есть случай, в котором я хотел бы выполнить некоторую проверку ввода для @RequestParams конечной точки.
Я знаю о валидаторах и пользовательских валидаторах, и моя текущая стратегия предполагает создание объекта-оболочки вокруг RequestParams, пользовательский валидатор и применяет уровень класса аннотацию, которая запускает пользовательскую проверку.
Моя проблема заключается в том, что пользовательская проверка реализует ConstraintValidator, что означает, что средство проверки будет либо возвращать истину или ложь, и ошибку будет создан Spring с некоторым текстом (я также знаю, что я могу изменить этот текст). Однако я хочу создать пользовательскую полезную нагрузку обратно клиенту. Примером может быть
class MyError {
int code;
String message;
}
. Способ возврата этого объекта - через обработчик ошибок @ControllerAdvice, который понимает, что исключение ConstraintValidationException должно возвращать мой пользовательский формат полезной нагрузки. Тем не менее, мне нужно вернуть разные коды и сообщения по разным причинам на входной проверки не удалось. Например:
- Поле не заполнено -> код XXX
- Поле отформатировано неправильно -> код YYY
Насколько я знаю, возможна небольшая настройка исключения, доступного из моего @ControllerAdvice, я могу получить список произошедших ошибок, но не могу легко определить, что произошло. (Технически я могу, но это должно быть основано на строке сообщения, которая довольно слабая).
Есть ли способ предоставить дополнительные данные для исключения, чтобы я мог различить guish из @ControllerAdvice, что случилось и, соответственно, создать свой собственный ответ об ошибке?
Неправильно ли я подхожу к нему?