问题描述,请详细查看https://www.jfinal.com/feedback/6663
以下是有@jfinal 提供的思路处理的;
@Override
public void configConstant(Constants constants) {
PropKit.use("undertow.properties");
MODE = PropKit.get("undertow.config.mode", "debug");
PropKit.append(StrUtil.format("global_config_{}.properties", MODE));
IS_DEBUG = "debug".equals(MODE);
constants.setInjectDependency(true);
constants.setInjectSuperClass(true);
constants.setDevMode(true);
constants.setLogFactory(new Slf4jLogFactory());
constants.setJsonFactory(new MixedJsonFactory());
constants.setRenderFactory(new ExceptionRenderFactory());
}
public class ExceptionRenderFactory extends RenderFactory {
@Override
public Render getErrorRender(int errorCode) {
return getErrorRender(errorCode,constants.getErrorView(errorCode));
}
@Override
public Render getErrorRender(int errorCode, String view) {
LogKit.error(StrUtil.format("ExceptionRenderFactory 错误码处理【errorCode:{},view:{}】", errorCode, view));
return new ExceptionRender(errorCode,view);
}
}
public class ExceptionRender extends ErrorRender {
private static final String jsonOrther = "{\"msg\":\"{}【服务器内部未知错误,请联系平台】\",\"state\":\"fail\"}";
private static final String json404 = "{\"msg\":\"404【请求资源不存在】\",\"state\":\"fail\"}";
public ExceptionRender(int errorCode, String view) {
super(errorCode, view);
LogKit.error(StrUtil.format("ExceptionRender 错误码处理【errorCode:{},view:{}】", errorCode, view));
}
@Override
public void render() {
String url = this.request.getServletPath();
this.response.setStatus(this.getErrorCode());
if (this.getErrorCode() == 400
|| this.getErrorCode() == 401
|| this.getErrorCode() == 403
|| this.getErrorCode() == 404
|| this.getErrorCode() == 500){
if (url.startsWith("/api")){
String errorJson = this.getErrorJson();
RenderManager.me().getRenderFactory().getJsonRender(errorJson).setContext(this.request, this.response).render();
}else {
super.render();
}
}else{
super.render();
}
}
private String getErrorJson() {
int errorCode = this.getErrorCode();
if (errorCode == 404) {
return json404;
} else {
return StrUtil.format(jsonOrther,errorCode);
}
}
}