使用 “统一的渲染控制” 可以对输出做统一的控制外。。。还可以借助路由拦截器 RouterInterceptor ，对 mvc 返回结果做提交确认机制（即可修改）进行控制（相对来讲，这个可能更简单）。。。<mark>关于全局的请求异常处理，最好不要放在这里。。。放到过滤器（因为它是最外层的，还可以捕捉 mvc 之外的异常）</mark>

这个文，也相当是对 RouterInterceptor 应用的场景演示（只是示例，具体根据自己的情况处理）：

### 1、案例1：为返回结果统一加上外套


```java
@Component
public 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 返回结果做处理

```java
@Component
public 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;
    }
}
```