在项目开发中经常会写如下代码:
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";
}