Обработчик Goblal Exceptions Spring - добавить данные при отправке исключения - PullRequest
0 голосов
/ 07 октября 2019

У меня есть сомнения относительно того, как передать больше данных для создания исключения, я хочу передать больше данных во время его запуска, чтобы поместить эти данные в ответ службы. У меня есть класс обработчика исключений, помеченный @ControllerAdviceвесной, но я не знаю, как лучше всего передать данные.

Это код, который у меня есть

throw new OcspException("Exception OCSP");

public class OcspException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public OcspException(String businessMessage) {
        super(businessMessage);
    }

    public OcspException(String businessMessage, Throwable throwable) {
        super(businessMessage, throwable);
    }

} 
@ExceptionHandler(OcspException.class)
    public ResponseEntity<Object> exception(OcspException exception,HttpServletRequest request) {

        ResponseException response = new ResponseException();
        response.setCode("404");
        return new ResponseEntity<>(response, HttpStatus.NOT_FOUND);

    }

У меня есть идея сделать это, но я не знаю, является ли это хорошей практикой ... в классе OcspException создавать атрибуты с их установщиками и получателями и создавать конструктор, который получает эти данные, чтобы затемизвлечь данные в контроллере исключений

throw new OcspException("Exception OCSP","Hello");
public class OcspException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    private String m;

    public OcspException(String businessMessage) {
        super(businessMessage);
    }

    public OcspException(String businessMessage, Throwable throwable) {
        super(businessMessage, throwable);
    }

    public OcspException(String businessMessage, String message) {

        super(businessMessage);
        setM(message);

    }

    public String getM() {
        return m;
    }

    public void setM(String m) {
        this.m = m;
    }


}
@ExceptionHandler(OcspException.class)
    public ResponseEntity<Object> exception(OcspException exception,HttpServletRequest request) {



        ResponseException response = new ResponseException();
        response.setCode("404");
        response.setDetails(exception.getM() );
        return new ResponseEntity<>(response, HttpStatus.NOT_FOUND);

    }

1 Ответ

0 голосов
/ 08 октября 2019

Попробуйте создать модель с именем ErrorDetails, которая будет содержать метку времени, сообщение и детали.

Это может выглядеть так:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ErrorDetails {
  private LocalDateTime timeStamp;
  private String message;
  private String details;
}

Вот пример того, как обычно выглядят мои пользовательские исключения:

@Data
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class OrderNotFoundException extends RuntimeException {
  private final String message;

  public OrderNotFoundException(String message) {
      super(message);
      this.message = message;
  }
}

Затем для @ExceptionHandler:

@ExceptionHandler(OrderNotFoundException.class)
public ResponseEntity<ErrorDetails> 
orderNotFoundException(OrderNotFoundException ex, WebRequest request) {
      ErrorDetails errorDetails = ErrorDetails.builder()
              .timeStamp(LocalDateTime.now())
              .message(ex.getMessage())
              .details(request.getDescription(false))
              .build();

      return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);
}

Ответ об ошибке для заказа, который не был найден, таков:

{
  "timeStamp": "2019-10-07T21:31:37.186",
  "message": "Order with id 70 was not found.",
  "details": "uri=/api/v1/order"
}

Таким образом, вы можете добавить любые дополнительные детали в объект ErrorDetails. Я надеюсь, что это помогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...