SpringBoot项目通用返回值与全局异常处理(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/litte_frog/article/details/88050589

SpringBoot项目通用返回值与全局异常处理 文中使用@RestControllerAdvice注解的MyExceptionHandler类完成对异常的统一处理。比如:在Controller中如果对入参校验不通过时直接throw一个自定义异常,然后这个异常会被捕获,会执行MyExceptionHandler类中的handleException()方法,打印日志并组装统一返回格式给调用者。视乎没有什么问题…

在微服务体系的项目中,多个服务协同完成工作,注册中心,配置中心,网关,各业务模块以及基础服务等。基础服务是的职责一般都是给各业务模块提供基础的查询服务,少量的或者从不提供增加修改功能。假设一个服务其中一个接口提供的是查询一个订单编号是否有效,订单编号不存时表示无效,返回一个Result并给出code和msg,而各个业务模块在某一时间段会频繁调用该接口,这时如果使用throw异常的方式就会导致该异常被框架频繁try_catch。try_catch对程序性能影响是非常大的。

所以必须对基础业务的返回异常方式修改

1 修改通用返回值实体类,增加静态方法ok()和error()

public class Result<T> {
    private boolean success = true;
    private String errorCode = "0";
    private String errorMsg = null;
    private List<T> data = new ArrayList<>();

    public Result() {}
    public Result(List<T> data) {
        if (data != null && data.size() > 0) {
            this.data = data;
        }
    }
    public Result(T data) {
        this.data.add(data);
    }

    // 成功时
    public static Result ok() {
        return new Result();
    }

    public static Result ok(List data) {
        Result r = new Result();
        r.setData(data);
        return r;
    }

    // 异常时
    public static Result error(String code, String msg) {
        Result r = new Result();
        r.setSuccess(false);
        r.setErrorCode(code);
        r.setErrorMsg(msg);
        return r;
    }

    public static Result error(MyExceptionEnum myExceptionEnum) {
        return error(myExceptionEnum.getCode(), myExceptionEnum.getMsg());
    }
	// 省略getter、setter和tostring
}

2 controller中throw new Exception修改为return Result.error()

    @RequestMapping(
            value = "test2",
            method = RequestMethod.POST)
    public Result<FrogTest> test2(@RequestBody FrogTest bean) {
        if (bean.getName() == null) {
            // 校验失败时
            return Result.error("A02", "名称不能为空");
            //throw new MyException("A02","名称不能为空");
        }
        // 执行业务成功时
        return new Result<>(bean);
    }

优化完毕!

一个成熟的项目必定时各个方面都是较完美的,比如拥有合理的架构,可维护性高的代码,性能达标,运维成本低且简单等。
作为一个程序员中的菜鸡或许不能站在很高的角度去考虑到方方面面,但是既然天天与代码接触,就必须为自己的代码负责。尽可能花时间的对我们自己的源代码不断的进行优化,而不只是考虑实现功能就完事。在性能优化方面我们需要通过不断学习计算机相关知识、编程语言、框架以及工作经验的积累才能完成,但是在源代码优化方面是人人可以做到的。

使用简练的注释、合理的空格空行、方法的拆分都可以使代码清晰美观,更重要的是自己或者别人维护起来方便。除此之外,使用枚举类、编写工具类、设计模式使用、学习JDK新特性和思想等可以简化代码、使业务功能清晰划分,同样是为了达成好维护的目标。

以上是一些个人体会。

一开始写博客是为了记录一些学习内容和工作心得,因为最早是记在文档中后来电脑换来换去就丢失了不少,所以选择在博客中记录。一些学习教程和已经解决的问题网上有的就不在记录了,定期汇总,自己遇到的问题觉得有价值的内容在放到博客上。

前些天朋友问我几个技术框架知不知道,作为一个菜鸡,我很争气的告诉他没听过。网上各种技术框架层出不穷,感觉永远都跟不上节奏,今天一个K8s明天一个K3s,虽然这样多,学还是要学的,但是我觉得还是深度优先、广度次之,经常用的比如spring系列还是要深入理解一下,如果目前还没接触到的框架等到用的时候再去学习。框架学习还是先会用再去看原理看底层。毕竟项目开发时可没有时间等你研究几个月研究明白了才开发,需要的是能看着官方文档就能快速上手的。

说到工作,我觉得以我个人情况来说,就靠着工作赚着几毛钱养家糊口,所以工作态度还是很端正的,多做多思考,对自己也是一个锻炼。不论什么时候认认真真,对人对事对自己都负责

以上是一些个人心得。

最后一句话,咸鱼也要有梦想,至少应该做到比其他咸鱼更咸!

猜你喜欢

转载自blog.csdn.net/litte_frog/article/details/88050589