关于404,500的错误提示

项目中controller分两种

a.后台管理接口,eg:(/aa/bb)

b.app接口,eg:(/aa/api/bb)


如果根据不用的url,处理不同的404,500

如果是a情况,404返回的是一个错误页面

如果是b情况,404返回的是一个json


目前的处理方式是:

@Override
public void configConstant(Constants constants) {
    constants.setRenderFactory(new ExceptionRenderFactory());
}

public class ExceptionRenderFactory extends RenderFactory {

    @Override
    public Render getErrorRender(int errorCode) {
        LogKit.error(StrUtil.format("错误码处理【errorCode:{}】", errorCode));
        if (errorCode == 500) {
            return new JsonRender("{\"msg\":\"500【服务器内部未知错误,请联系平台】\",\"state\":\"fail\"}");
        } else if (errorCode == 404) {
            return new JsonRender("{\"msg\":\"404【请求资源不存在】\",\"state\":\"fail\"}");
        }
        return super.getErrorRender(errorCode);
    }

    @Override
    public Render getErrorRender(int errorCode, String view) {
        LogKit.error(StrUtil.format("错误码处理【errorCode:{},view:{}】", errorCode, view));
        //TODO 再次进行处理了,更具view前缀,判断是否属于后端API,如果是API返回JSON
        return super.getErrorRender(errorCode, view);
    }
}

此方案导致所有的都会返回json字符串

评论区

JFinal

2019-10-25 16:02

光定制 RenderFactory 无法实现,在当前的基础上,再定制一个 ErrorRender,通过继承 ErrorRender,在其 render() 方法内部通过:
request.getRequestURI();

即可获取到当前请求的 url,然后通过一个 if 判断,决定是返回 json 还是返回页面即可

记得搞定后回来分享

BigSnake1989

2019-10-25 18:10

@JFinal 谢谢提供的思路已经解决了 https://www.jfinal.com/share/1864

JFinal

2019-10-25 18:59

热门反馈

扫码入社