Как обрабатывать разные типы исключений в одном месте? - PullRequest
1 голос
/ 15 апреля 2020

Я использую play 2.8.x framework, и у меня есть следующий контроллер:

public class HomeController extends Controller {
    public Result show(Http.Request request) throws MyException {
        ...
        return ok("some_data");
    }
}

, и я хочу сделать что-то вроде Spring framework для обработки исключений:

// It is from the Spring web framework
@ExceptionHandler(MyException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ExplainExceptionDTO handleMyException() {
    ...
    return explain;
}

Могу ли я сделать что-то подобное в play 2.8.x framework?

1 Ответ

1 голос
/ 15 апреля 2020

Это очень хорошо объясняет: https://www.playframework.com/documentation/2.8.x/JavaErrorHandling

@Singleton
public class ErrorHandler implements HttpErrorHandler {
  public CompletionStage<Result> onClientError(
      RequestHeader request, int statusCode, String message) {
    return CompletableFuture.completedFuture(
        Results.status(statusCode, "A client error occurred: " + message));
  }

  public CompletionStage<Result> onServerError(RequestHeader request, Throwable exception) {
    return CompletableFuture.completedFuture(
        Results.internalServerError("A server error occurred: " + exception.getMessage()));
  }
}

Интересующий вас метод - onServerError. Таким образом, вместо возврата по умолчанию internalServerError проверьте тип Throwable, если ваше исключение возвращает badRequest(), вы можете даже предоставить шаблон, если хотите.

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