Solon 统一的返回结果调整
2023-05-08 04:52:51
来源:博客园 2023-05-08 04:52:51
(资料图)
使用 “统一的渲染控制” 可以对输出做统一的控制外。。。还可以借助路由拦截器 RouterInterceptor ,对 mvc 返回结果做提交确认机制(即可修改)进行控制(相对来讲,这个可能更简单)。。。关于全局的请求异常处理,最好不要放在这里。。。放到过滤器(因为它是最外层的,还可以捕捉 mvc 之外的异常)
这个文,也相当是对 RouterInterceptor 应用的场景演示(只是示例,具体根据自己的情况处理):
1、案例1:为返回结果统一加上外套@Componentpublic class GlobalResultInterceptor implements RouterInterceptor { @Override public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable { //提示:这里和 doFilter 差不多... chain.doIntercept(ctx, mainHandler); } /** * 提交结果( render 执行前调用)//不要做太复杂的事情 */ @Override public Object postResult(Context ctx, Object result) throws Throwable { if(result instanceof Throwable){ //异常类型,根据需要处理 return result; }else{ //例:{"name":"noear"} 变成 {"code":200,"description":"","data":{"name":"noear"}} return Result.succeed(result); } }}
2、案例2:使用翻译框架对 mvc 返回结果做处理@Componentpublic class GlobalTransInterceptor implements RouterInterceptor { @Inject private TransService transService; @Override public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable { //提示:这里和 doFilter 差不多... chain.doIntercept(ctx, mainHandler); } /** * 提交结果( render 执行前调用)//不要做太复杂的事情 */ @Override public Object postResult(Context ctx, Object result) throws Throwable { //提示:此处只适合做结果类型转换 if (result != null && !(result instanceof Throwable) && ctx.action() != null) { result = transService.transOneLoop(result, true); } return result; }}