如何在拦截器intercept判断action是指向页面还是方法

如何在拦截器里面判断action跳转的是页面,还是方法呢。

比如界面的

public void demo() {
   render("/aa/demo.html");
}


比如方法的
public void dataById() {
   String id = get("data");
   if (id != null && id != "") {
       renderJson(Ret.ok("data", accountSrv.getAccountById(id)));
   }
}



目的:通过判断是界面还是方法,可以在报错的时候,拦截器里面返回404界面还是Ret的json字符串。


评论区

JFinal

2020-02-24 17:00

在拦截器里面 inv.getController().getRender() ,然后判断它的类型即可

foam103

2020-02-24 17:48

@JFinal 谢谢波总,放错位置了,应该是放在inv.invoke()后面,用inv.getController().getRender().getView()做判断就可以了,之前放到这个前面了。

foam103

2020-02-24 21:20

@JFinal 在追问一下,前端/XXX访问的时候,如果没有这个方法,默认都会转到/ 的方法上,而不是跳转到拦截器catch (Exception e) 报错。怎么才能判断或者设置一下这个地方。

JFinal

2020-02-24 22:33

@foam103 checkUrlPara(0) 即可, 参数可自由调整,有几个 urlPara 就改成相应的数字

zzutligang

2020-02-24 23:46

@JFinal,我这里反倒遇到一个矛盾的事,我写了一个全局拦截器用来判断当前是否登录,如果已经登录,就invoke,如果没登录(或则登录session超时),然后如果是前端ajax调用,就返回错误json,如果是请求页面,就重新导航到登录页面,这个咋处理呢?如果只有在invoke后才能判断我这个方法是renderjson还是render一个页面,那这个时候早就被没登录的判断拦截了。

热门反馈

扫码入社