Обработка исключений и ответ на ошибки API - PullRequest
0 голосов
/ 29 марта 2020

Я работаю над дизайном обработки исключений и ответов на ошибки API. Может кто-нибудь, дайте мне знать, как исключения разработаны для корпоративных приложений. Можем ли мы сопоставить java предварительно определенные исключения с исключениями приложения. Если так, как мы должны отобразить предопределенные java исключения в сценарий нашего приложения? если нет, то как нам разработать исключения для корпоративных приложений? какие-либо руководящие принципы? Как только исключения сопоставлены, они передаются на уровень обслуживания. Должны ли сообщения об ошибках (для ответа API) создаваться на уровне сервиса? Если да, можете ли вы указать причину? Если нет, то можете ли вы указать какие-либо другие параметры для ответа об ошибке обрамления любого API? Можете ли вы предложить какую-либо методику проектирования, используемую в вашем приложении? Заранее спасибо

1 Ответ

1 голос
/ 30 марта 2020

Таким образом, все, что вам нужно сделать, это написать 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);
   }

}

...