首页 > 其他分享 >Solon 统一的返回结果调整

Solon 统一的返回结果调整

时间:2023-05-07 23:22:30浏览次数:27  
标签:返回 mainHandler Solon chain ctx result Throwable public 统一

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

这个文,也相当是对 RouterInterceptor 应用的场景演示(只是示例,具体根据自己的情况处理):

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

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

@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;
    }
}

标签:返回,mainHandler,Solon,chain,ctx,result,Throwable,public,统一
From: https://www.cnblogs.com/noear/p/17380442.html

相关文章

  • Solon 路由的 Url 大小写匹配与事项注意
    Solon路由器对url的匹配默认是“忽略大小写”的。如果有需要,可以强制开启:v2.2.14后支持@SolonMainpublicclassApp{publicstaticvoidmain(Stringargs){Solon.start(App.class,args,app->{app.router().caseSensitive(true);//或许以......
  • 为什么useState返回的是数组而不是对象?
    1.如果 useState 返回数组,那么可以顺便对数组中的变量命名,代码看起来也比较干净2.自定义hook的时候可以遵循一个简单原则:当参数大于2个的时候返回值的类型返回 object,否则返回数组。......
  • 2023-05-07:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返
    2023-05-07:给你一个大小为nxn二进制矩阵grid。最多只能将一格0变成1。返回执行此操作后,grid中最大的岛屿面积是多少?岛屿由一组上、下、左、右四个方向相连的1形成。输入:grid=[[1,0],[0,1]]。输出:3。来自亚马逊、谷歌、微软、Facebook、Bloomberg。......
  • 2023-05-07:给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。 返
    2023-05-07:给你一个大小为nxn二进制矩阵grid。最多只能将一格0变成1。返回执行此操作后,grid中最大的岛屿面积是多少?岛屿由一组上、下、左、右四个方向相连的1形成。输入:grid=[[1,0],[0,1]]。输出:3。来自亚马逊、谷歌、微软、Facebook、Bloomberg。答案2023......
  • 使用 @ResponseBody 注解直接返回json字符串结果中文出现乱码
    在类上直接使用@RestController,这样子,里面所有的方法都只会返回json字符串了,不用再每一个都添加@ResponseBody!我们在前后端分离开发中,一般都使用@RestController,十分便捷!@RestControllerpublicclassUserController{//produces:指定响应体返回类型和编码@Request......
  • Grafana 系列-统一展示-2-Prometheus 数据源
    系列文章Grafana系列文章GrafanaPrometheus数据源Grafana提供了对Prometheus的内置支持。本文会介绍GrafanaPrometheus(也包括Prometheus的兼容实现,如Thanos,Mimir等)数据源的部分选项、变量(Variable)、查询(Query)和其他针对Prometheus数据源的功能。配......
  • 解决微信小程序请"注意游客模式下,调用 wx.login 是受限的, API 的返回是工具的模拟返
    新建一个微信小程序的项目,导入了代码后,出现微信小程序请"注意游客模式下,调用wx.login是受限的,API的返回是工具的模拟返回"这是因为,微信开发者工具没有配置小程序的appid下面添加上就可以了 ......
  • 提取文档的内容,返回每个单词处出现的次数
    #统计文档中每个字出现的次数word_count={}withopen("D:\Desktop\wde.txt")asfin:#打开文档forlineinfin:#提取文档的内容line=line[:-1]#去掉最后的换行符w=line.split()#单词之间是空格forwordinw:#提取文档内容ifwo......
  • GaussDB(DWS)字符串处理函数返回错误结果集排查
    摘要:在使用字符串处理函数时,有时会出现非预期结果的场景。在排除使用问题后,应该从encoding和数据本身开始排查。本文分享自华为云社区《GaussDB(DWS)字符串处理函数返回错误结果集排查》,作者:-CHEN111-。在使用字符串处理函数时,有时会出现非预期结果的场景。在排除使用问题后,应......
  • wordpress插件:WPFront Scroll Top返回顶部(WPFront Scroll Top 2.0.7.08086 / wordpr
     一,安装插件/设置插件:插件->安装插件->用top关键字进行搜索,然后选择WPFrontScrollTop点立即安装按钮安装完成后,点启用按钮选中前两项选中前两项后,点保存更改按钮二,测试效果说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architec......