问题:为什么会出现多次请求输出?
比如输出了:
{"code":403,"description":"No role grantd","data":4}{"code":400}
先了解一下:完整的Web《请求处理过程示意图》。在示意图中的任何一个环节,都是有可能进行响应输出的,从而造成非期望的结果。
比如这个简单的例子,就可以造成上面的输出效果:
App.class
import org.noear.solon.Solon;
public class App{
public static void main(String[] args){
Solon.start(App.class, args, app->{
app.filter((ctx,chain)->{
chain.doFilter(ctx);
ctx.output("{\"code\":400}");
});
});
}
}
DemoController.class
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.core.handle.Result;
@Controller
public class DemoController{
@Mapping("/test")
public Object test(){
return Result.failure(403, "No role grantd");
}
}
一般来讲,大家不会这么写代码。而造成这种输出的“常见场景”是对某某异常的处理:
建议
- 多注意细节
- 可以借助
ctx.getHandled(),ctx.getRendered()做些控制与检查 - 异常,可以由一个全局 过滤器 处理(避免出现“可能二”)[推荐]