基于spring的web应用,如何处理服务层的错误?

比如我有个下订单的服务,PlaceOrderService,里面有个提交订单的方法,submitOrder()。如果提交订单失败,原因可能有很多,有业务相关的错误,也可能是IOException这种错误,显然,简单的返回 成功/失败 这种布尔型的值到Controller/Action里是不够的,大家是如何处理类似的情况的?
是返回整形或者字符串型的状态码?
还是返回各种自定义异常?
还是有别的更好的办法?

小项目的话没那么严格,返回数字,字符串,抛异常都可以的。自己看着弄,这个没有硬性规定或者套路。。。

我是记录日志,并抛出异常。

可以只定义一个OrderException(防止异常层次太多),包含:
1、异常码
2、异常消息

是返回整形或者字符串型的状态码?
项目小的情况,返回什么都没关系。如果项目很大,返回这些让Controller/Action翻译的信息就显得不可取,因为到时候会出现各种业务层的状态码。

还是返回各种自定义异常?
首先对异常做个大体上规划,然后再自定义异常。比如说订单服务,就对整个订单操作定义一种异常。当然,订单中出现IOException时,也可抛出订单异常,不过订单异常类构造函数增加异常类型的参数,由订单异常自己翻译。