在项目开发中经常会写如下代码:
public void doPublish() { // 从param中获取name 和 age if(StrKit.isBlank("name")) { renderJson(Ret.by("msg", "名称不能为空")); return; } if(StrKit.isBlank("age")) { renderJson(Ret.by("msg", "年龄不能为空")); return; } Ret ret = xxService.publish(name,age);//你的业务方法调用返回结果.... renderJson(ret); }
增加ReturnInterceptor拦截器后:
public Ret doPublish() { // 从param中获取name 和 age if(StrKit.isBlank("name")) { return Ret.by("msg", "名称不能为空"); } if(StrKit.isBlank("age")) { return Ret.by("msg", "年龄不能为空"); } return xxService.publish(name,age); }
ReturnInterceptor拦截器代码:
public class ReturnInterceptor implements FixedInterceptor { @Override public void intercept(Invocation inv) { inv.invoke(); Controller ctrl = inv.getController(); if (ctrl != null) { Object result = inv.getReturnValue(); // 只有存在返回值时才进行render处理,否则使用默认方式,例如可能是renderHtml if (result != null) { ctrl.renderJson(result); } } } }
有个小建议, Object ret = inv.getReturnValue() 还可以做得更智能一些,例如:
if (ret intanceof String) {
render((String)ret);
} else {
renderJson(ret);
}
这样改进的话, controller 中就可以这么来玩了:
public Ret doPublish() {
// 从param中获取name 和 age
if(StrKit.isBlank("name")) {
return Ret.by("msg", "名称不能为空");
}
if(StrKit.isBlank("age")) {
return Ret.by("msg", "年龄不能为空");
}
if (notLogin()) {
return "login.html";
}
return "index.html";
}