首页 > 解决方案 > 如何在一个地方处理不同类型的异常?

问题描述

我正在使用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吗?

标签: javaplayframework

解决方案


这很好地解释了它: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 类型,如果它是您的异常 return badRequest(),您甚至可以根据需要提供模板。


推荐阅读