package testapp.endpoint; import act.app.ActionContext; import act.controller.Controller; import org.osgl.exception.UnexpectedException; import org.osgl.mvc.annotation.After; import org.osgl.mvc.annotation.Before; import org.osgl.mvc.annotation.Catch; import org.osgl.mvc.annotation.GetAction; import org.osgl.mvc.result.BadRequest; import org.osgl.mvc.result.Result; @Controller("/aop") @SuppressWarnings("unused") public class InterceptorTestController extends Controller.Util { @Catch(Exception.class) public Result handleException(Exception e) { return text("bar-" + e.getMessage()); } @Before public void validate(int n) { if (n < 0) { throw new BadRequest(); } } @GetAction("foo") public int foo(int n) { return n; } @GetAction("bar") public int bar(int n) throws Exception { if (n % 2 == 0) { throw new ArrayIndexOutOfBoundsException("array:" + n); } else if (n % 3 == 0) { throw new UnexpectedException("unexpected:%s", n); } else { throw new Exception("exception:" + n); } } @Catch(UnexpectedException.class) public Result handleUnexpectedException(UnexpectedException e) { return text(e.getMessage()); } @Catch(ArrayIndexOutOfBoundsException.class) public Result handleArrayIndexOutOfBoundsException(ArrayIndexOutOfBoundsException e) { return text(e.getMessage()); } @After public void decorate(Result result, ActionContext context) { context.resp().addHeader("foo-code", String.valueOf(result.statusCode())); } }