ОК, так что я нашел, как добиться (вроде) того, что я хочу.
У меня сложилось впечатление, что я могу перехватить полное ответное сообщение об исключении и просто поместить его в свой объект, независимо от типа исключения. Оказывается, я могу получить большинство информации по умолчанию, но она специфична для каждого типа ошибок (очевидно).
Первая попытка:
Моя первая попытка состояла в том, чтобы просто «проверить» ответ ошибки по умолчанию со следующим. Это было предназначено для определения того, что делал Spring (какую ошибку он использовал - я думал, что это было бы исключение handleTypeMismatch
) - метод, приведенный ниже, - только один в классе (тот, с которым я сейчас имею дело) :
@ControllerAdvice
public class IntegrationExceptionHandler extends ResponseEntityExceptionHandler
{
@Override
public ResponseEntity<Object> handleBindException(final BindException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
{
return super.handleBindException(ex, headers, status, request);
}
}
Я ожидал, что сообщение об ошибке будет точно таким же, как и сообщение по умолчанию, однако это не привело к ответу (или пустому ответу?).
Мое "решение":
Хотя мне не нужно заново разрабатывать колесо, я должен совершить прыжок с обручем:
@Override
public ResponseEntity<Object> handleBindException(final BindException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
{
IntegrationResponse response = new IntegrationResponse(ex.getMessage());
response.setErrors(ex.getBindingResult().getAllErrors());
return new ResponseEntity<Object>(response, headers, status);
}
Где ошибки private List<ObjectError> errors;
(org.springframework.validation.ObjectError
)
Так что мне придется попытаться повторить каждую переопределяемую ошибку в ResponseEntityExceptionHandler
(что относится к моей ситуации) и обработать ее немного по-другому, теперь вы можете понять, почему я просто хотел обернуть существующий ответ .
Так же, как примечание, я попытался добавить: private Object error;
и private BindingResult error;
в качестве переменных в моем объекте ответа, однако обе попытки, по-видимому, отклоняют мой объект ответа и показывают ПРОСТО сообщение по умолчанию (как если бы не было контроллера совет) без намека на то, почему.
Если кто-нибудь обнаружит, как пропустить шаг ResponseEntityExceptionHandler
и просто обернуть объект ответа исключения по умолчанию, я с радостью приму этот ответ.