项目中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字符串
request.getRequestURI();
即可获取到当前请求的 url,然后通过一个 if 判断,决定是返回 json 还是返回页面即可
记得搞定后回来分享