假如一个 Service 提供了一个登陆接口,该 Service 会调用各种验证组件,比如 验证用户是否已经登陆、验证用户的 IP 是否在黑名单中、验证用户是否属于异地登录等等,当一切处理完成并验证登陆成功的时候,该接口就会返回成功。
问题是,在 Service 调用这些验证组件过程中如果产生了错误,那应该怎么返回给调用方最合适呢?
我没有在 Controller 中对认证组件依次验证并返回错误给用户,我更愿意封装在 Service , Controller 中我不想写太多复杂的东西。
我在 Java 中没有形成比较良好的思想体系,所以特来向各位请教,希望早日能让自己融入 Java 中,感谢你能分享优秀的方式、方法或者意见、建议,谢谢。
另外,以前我的两种处理方式:
( 1 )当 Controller 调用 Service 中的某个方法的时候,我会为本次调用建立一个错误栈,用来保存应该返回给用户的系统错误状态码,在 Service 调用某个组件并返回错误的时候,我就会把这个错误压入错误栈中,当遇到致命错误的时候(有些组件即使验证错误,但不是关键性错误可以忽略并继续接下来的流程), Service 就会返回给调用方,即 Controller ,此时 Controller 会去错误栈中找到最近一次的错误状态信息并返回给用户,并且把栈中的其他信息写入日志中,方便日后跟踪某位用户并单独对其调试分析。
( 2 )这种方法更傻,直接新建一个异常类,专门用来处理用户的错误,当遇到致命错误的时候,我就抛出一个异常(异常的第一个参数就是系统错误状态码),此时代码不会往下继续执行,统一在最顶层捕获这种类型的异常,然后返回给用户,记录此次请求的错误信息,方便日后分析。这种方法会导致内存消耗比较大,因为使用异常来完成对程序的终止并返回。
如果你有更好的姿势,麻烦教我一下,谢谢。
问题是,在 Service 调用这些验证组件过程中如果产生了错误,那应该怎么返回给调用方最合适呢?
我没有在 Controller 中对认证组件依次验证并返回错误给用户,我更愿意封装在 Service , Controller 中我不想写太多复杂的东西。
我在 Java 中没有形成比较良好的思想体系,所以特来向各位请教,希望早日能让自己融入 Java 中,感谢你能分享优秀的方式、方法或者意见、建议,谢谢。
另外,以前我的两种处理方式:
( 1 )当 Controller 调用 Service 中的某个方法的时候,我会为本次调用建立一个错误栈,用来保存应该返回给用户的系统错误状态码,在 Service 调用某个组件并返回错误的时候,我就会把这个错误压入错误栈中,当遇到致命错误的时候(有些组件即使验证错误,但不是关键性错误可以忽略并继续接下来的流程), Service 就会返回给调用方,即 Controller ,此时 Controller 会去错误栈中找到最近一次的错误状态信息并返回给用户,并且把栈中的其他信息写入日志中,方便日后跟踪某位用户并单独对其调试分析。
( 2 )这种方法更傻,直接新建一个异常类,专门用来处理用户的错误,当遇到致命错误的时候,我就抛出一个异常(异常的第一个参数就是系统错误状态码),此时代码不会往下继续执行,统一在最顶层捕获这种类型的异常,然后返回给用户,记录此次请求的错误信息,方便日后分析。这种方法会导致内存消耗比较大,因为使用异常来完成对程序的终止并返回。
如果你有更好的姿势,麻烦教我一下,谢谢。
