Solon 统一的返回结果调整

来源:博客园   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;    }}

热门推荐

猜你喜欢