Таким образом, все, что вам нужно сделать, это написать Global Exception Handler с помощью @ControllerAdvice или @RestControllerAdvice, а затем написать обработчики исключений. Вы можете сопоставить встроенные исключения с обработчиками исключений. Так что, если эти исключения возникнут, будет получен фрагмент кода обработчика исключений Выполнено. И мы можем предоставить настроенное сообщение об ошибке, чтобы клиент понял, что пошло не так.
ниже приведен фрагмент кода, который я разработал для обработки исключений остальных API. Так что в моем коде я обработал два исключения NoSuchElementException и MethodArgumentNotValid исключение.
например, в моем случае, если вы будете искать запись по идентификатору и если эта запись не существует, вы получите NoSuchElementException, чтобы клиент узнал, что запись не существует с что id
и для исключения MethodArgumentNotValid я добавил ограничения к переменным, например, при попытке ввода отрицательного идентификатора возникнет это исключение
@ ControllerAdvice
publi c класс GlobalExceptionHandler extends extends ResponseEntityExceptionHandler {
@ExceptionHandler(NoSuchElementException.class)
public final ResponseEntity<Object>handleRecordNotFoundException(NoSuchElementException ex,WebRequest request)
{
return handleExceptionInternal(ex,ErrorResponse.builder()
.status(HttpStatus.NOT_FOUND)
.timestamp(new Date())
.detail(ex.getLocalizedMessage())
.message("Record not found")
.build(),new HttpHeaders(),HttpStatus.NOT_FOUND,request);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,HttpHeaders headers,HttpStatus status,WebRequest request)
{
List<String> errors=new ArrayList<String>();
for(ObjectError error:ex.getBindingResult().getFieldErrors())
{
errors.add(error.getObjectName()+":"error.getDefaultMessage());
}
return handleExceptionInternal(ex,ErrorResponse.builder().details(errors).build,headers,HttpStatus.BAD_REQUEST,request);
}
}