57
задан 17 March 2015 в 08:43

1 ответ

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

Используя ControllerAdvice

@ControllerAdvice
public class RestResponseEntityExceptionHandler
    extends ResponseEntityExceptionHandler {

  @ExceptionHandler(value = {
      NotLoggedInException.class
  })
  protected ResponseEntity<Object> handleNotLoggedIn(
      final NotLoggedInException ex, final WebRequest request
  ) {
    final String bodyOfResponse = ex.getMessage();

    final HttpHeaders headers = new HttpHeaders();
    headers.add("Location", ex.getRedirectUri());
    return handleExceptionInternal(
        ex, bodyOfResponse,
        headers, HttpStatus.FOUND, request
    );
  }
}

класс исключений в моем случае:

@Getter
public class NotLoggedInException extends RuntimeException {

  private static final long serialVersionUID = -4900004519786666447L;

  String redirectUri;

  public NotLoggedInException(final String message, final String uri) {
    super(message);
    redirectUri = uri;
  }
}

И я инициировал его как это:

if (null == remoteUser)
  throw new NotLoggedInException("please log in", LOGIN_URL);
0
ответ дан 1 November 2019 в 16:04

Другие вопросы по тегам:

Похожие вопросы: