如何在一个地方处理不同类型的异常?
How to handle a different types of exception in a one place?
我正在使用 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
中做这样的事情吗?
这解释得很好: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
。因此,不要 return 检查 Throwable 类型的默认 internalServerError,如果这是你的异常 return badRequest()
,你甚至可以根据需要提供模板。
我正在使用 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
中做这样的事情吗?
这解释得很好: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
。因此,不要 return 检查 Throwable 类型的默认 internalServerError,如果这是你的异常 return badRequest()
,你甚至可以根据需要提供模板。