JFinal 如何设置全局500与404错误返回Json

原问题地址:http://www.jfinal.com/feedback/1502#replyContent

解决方法:

分析:

我看了下源码,出现505错误后,错误返回是ActionHandler负责处理,代码如下:
renderManager.getRenderFactory().getErrorRender(500).setContext(request, response, action.getViewPath()).render();
其中getErrorRender(500)调用RenderFactory.getErrorRender(500),代码如下:

public Render getErrorRender(int errorCode) {
return new ErrorRender(errorCode, constants.getErrorView(errorCode));
}

所以我只需要使用MyRenderFactory的实例替代renderManager中的RenderFactory即可,而ActionHandler中的RenderManager代码如下
private static final RenderManager renderManager = RenderManager.me();

RenderManager.me()返回的又是一个常量


所以解决方法如下:

在Config中增加如下代码:
public void configConstant(Constants me) {
//设置全局错误回复
RenderManager.me().setRenderFactory(new MyRenderFactory());
}

MyRenderFactory代码如下:
/**
* 设置500错误返回Json
*/
public class MyRenderFactory extends RenderFactory {
@Override
public Render getErrorRender(int errorCode) {
RespBody respBody = new RespBody();
respBody.setResult(RespBody.Code.ERROR);
if (errorCode == 500) {
return new JsonRender(respBody);
}
return super.getErrorRender(errorCode);
}
}

搞定!

备注:其中RespBody是自定义的类,用于统一返回格式

评论区

JFinal

2017-06-12 15:51

感谢你的分享,赞一个

pfjia

2017-06-13 09:49

@JFinal 多谢站长指点

热门分享

扫码入社