PlayF 1.2.7拦截器存在问题。 我有一个带@Before注释的控制器AuthCtl。 另一个控制器类AlarmCtl使用@With(AuthCtl.class)。
public class AuthCtl extends Controller {
public static final String KMK_AUTH_TOKEN = "KMK_AUTH_TOKEN";
public static final String KMK_USER_ID = "KMK_USER_ID";
@Before
static void checkAuthorization() throws KomekException {
if (request.cookies.containsKey(AuthCtl.KMK_AUTH_TOKEN) &&
request.cookies.containsKey(AuthCtl.KMK_USER_ID)) {
//Something
} else {
throw new UnauthorizedException();
}
}
@Catch
static void handleExceptions(Throwable t) {
response.status = ((KomekException)t).getErrorCode();
response.accessControl("*");
response.contentType = "application/json";
renderText(t.toString());
}
}
@With(AuthCtl.class)
public class AlarmCtl extends Controller {
//Something
}
因此,当我在checkAuthorization方法中抛出异常时,我的handleExceptions方法不会拦截它。问题是什么?
答案 0 :(得分:0)
您需要指定要捕获的异常类型。
所以在你的情况下,需要这样写:
@Catch(KomekException.class)
static void handleExceptions(Throwable t) {
response.status = ((KomekException)t).getErrorCode();
response.accessControl("*");
response.contentType = "application/json";
renderText(t.toString());
}
或者,对于一般(一种脏)catch all,使用根Exception类:
@Catch(Exception.class)
static void handleExceptions(Throwable t) {
response.status = ((KomekException)t).getErrorCode();
response.accessControl("*");
response.contentType = "application/json";
renderText(t.toString());
}