关于带返回整数action 当返回参数为空的异常问题。

应用是这样子的,项目主要是做异常请求,在controller有定义带返回参数的action如:
public Object list() {

   return xxxcvs.list(getPara(0));

}
xxxcvs.list(getPara(0))为空时,就会报java.lang.RuntimeException: File not found异常,如下处理:

public Object list() {

   List<Record> list = xxxcvs.list(getPara(0));

if (null == list) {

renderNull();

}

return list;

}

才能避免掉出java.lang.RuntimeException: File not found 500错误,这个问题出现,希望框架层做下优化对带有返回参数的action处理,得手动做下null值的处理麻烦。

评论区

JFinal

2018-08-11 17:39

做个全局拦截器处处理一下:
public class MyInterceptor implements Interceptor {
public void intercept(Invocation inv) {
inv.invoke();

if (inv.getController().getRender() == null) {
Object ret = inv.getReturnValue();
if (ret == null) {
inv.getController().renderNull();
}
}
}

}

最后再配置一下即可:
me.add(new MyInterceptor());

当然,你的这种情况很可能不需要判断 inv.getReturnValue(),核心方法简化成下面试试:
public void intercept(Invocation inv) {
inv.invoke();
if (inv.getController().getRender() == null) {
inv.getController().renderNull();
}
}

EATI001

2018-08-11 18:43

@JFinal ^_^^_^!!一个项目有好多个全局拦截器,压力大不呢。

JFinal

2018-08-11 23:22

@EATI001 拦截器就是普通的 Java 方法调用,并没有使用反射,并且拦截器是单例的,在系统启动过程中一次性创建并装配好。 性能极高

这点代码每秒运行应该是百万至千万级别的量,性能损耗可以完全忽略不计

EATI001

2018-08-12 09:05

@JFinal 老大利害,对了老大我又有另外有两个细节问题及一些愚见反馈给老大您看看(^_^!!):
1、比如项目用Db+record模式开发,在表单提交时,啥时可以像model+bean的方式接收参数,及jfinal-java8版本用形参接收着,另外就是,对datatime类型的日期进行格式化下的呢,因为现在一个问题就是原封不动的jdbc在输出datatime类型的日期会带有毫秒也就是如 2018-08-08 08:08:08.0这样子的,多处理存在,需要手动去处理格式化蛮影响的,希望xx.get()或xx.getDate()这些,如果是存在datetime类型带有毫秒的自动去格式化下。
2、获取参数默认值问题,当获取数据字段值为null时,有提供自定义默认值的方法挺好的,但是,是否可考虑当没有自定默认值时,取数据字段值为null默认返回""的字符串的呢。
以上两点细节反馈主要是想更提高下开发效率,框架已经提供了很多便利的方法,总得来说还是希望手动档+自动档=手自一体,这样效率会提升一个档次,两者存在是相符相成缺一不可,如果单一的存在都会很片面,以上反馈还得老大做下权衡^_^.

啦er啦

2018-08-14 09:03

action必须要render一下,不管render什么,即使你的list不是null然后return list了也要render,否则框架默认给你render和方法同名的html文件。

热门反馈

扫码入社