kiftd-source icon indicating copy to clipboard operation
kiftd-source copied to clipboard

很多地方处理异常都有问题

Open 0000005 opened this issue 6 years ago • 3 comments

image image image

等等,这种处理异常的方式有问题。 1、当出现问题的时候,前端虽然收到了反馈,你后端把这个异常给吞了,并且更加严重的是,没有打印错误日志,这个问题很严重,当我们出现问题的时候,会无处排查 2、当你把错误吞调的时候,就无法使用spring事务框架进行数据回滚了。

0000005 avatar Oct 19 '19 01:10 0000005

推荐解决方案 自己继承RuntimeException 实现一个ServiceException。

public class ServiceException extends RuntimeException {
    private Object data;

    public ServiceException(String message) {
        super(message);
    }

    public ServiceException(String message, Object data) {
        super(message);
        this.data = data;
    }

    public ServiceException(String message, Throwable cause) {
        super(message, cause);
    }

    public Object getData() {
        return this.data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

然后实现WebMvcConfigurer 进行统一异常处理。 具体可以参考这篇博文 https://www.cnblogs.com/gdwkong/p/8969963.html

正确的写法是

try
{
   //do something
}
catch(Exception e)
{
    //do something handle the exception
    log.error("do something error",e);
    //返回到前端的内容会根据你实现的WebMvcConfigurer 类封装成你想要的形式
    throw new ServiceException("UPLOAD ERROR");
}

0000005 avatar Oct 19 '19 01:10 0000005

kiftd的源代码中确实还存在很多设计缺陷,您提到的异常处理就是其中一类。当初很多异常都是只考虑了它对前端用户产生的影响,因此只做了基本的逻辑反馈。您给出的建议已经阅读,在后续优化代码(如果有时间的话)时会作为参考,不过,一般而言这一过程可能需要很长的时间了。 再次感谢您的反馈,这是kiftd不断进步的最佳动力。

KOHGYLW avatar Oct 19 '19 01:10 KOHGYLW

@81519434 @KOHGYLW 建议两位可以达成一个共识,就是 @81519434 可以 fork 一份进行相应的改进,完成后 PR 到 @KOHGYLW ,而主干在开发过程中尽量保持不再引入类似的使用。

dandycheung avatar Nov 26 '19 07:11 dandycheung