全局处理异常以及日志,通过函数式参数对行为解耦

描述:在我们平时的微服务开发中,调用其他服务的接口,通常要把接口调用部分做异常处理(try catch),或者打印异常日志或者结果日志,并且也有可能做一些统一的调用处理,比如微服务接口熔断等处理,这个时候可以适用函数式接口收拢所有的微服务调用集中处理

 

TestController2
复制代码
    @RequestMapping(value = "/listByVin", method = RequestMethod.GET)
    public String listByType(@RequestParam(value = "vin") String vin) {
        //正常写法
        try {
            return testService2.handler1(vin);
        }catch (Exception e){
            e.printStackTrace();
        }

        //函数式写法
        return ServerExeutor.executeAndReturn(() -> testService2.handler1(vin));
    }


    @RequestMapping(value = "/listByVin2", method = RequestMethod.GET)
    public String listByVin2(@RequestParam(value = "vin") String vin,@RequestParam(value = "status") Short status) {
        //正常写法
        try {
            testService2.handler2(vin,status);
        }catch (Exception e){
            e.printStackTrace();
        }
        //函数式写法
        ServerExeutor.execute(() -> testService2.handler2(vin,status));
        return "执行不带参函数完成";
    }
复制代码
ServerExeutor
复制代码
public class ServerExeutor {
    public static void execute(Runnable runnable){
        try {
            runnable.run();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static String executeAndReturn(Callable<String> callable){
        try {
            return callable.call();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
复制代码

 



posted @   蔡徐坤1987  阅读(88)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示