V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fkdog
V2EX  ›  Java

Service 层需要返回一些错误状态的需求,大家都是怎么设计的?

  •  
  •   fkdog · 2018-11-01 16:13:00 +08:00 · 2146 次点击
    这是一个创建于 2209 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如一些读写操作需要在一个事物里。
    有些状态需要进行判断,如果不符合则需要返回 controller 层一些状态,这样的场景大家都是怎么进行设计的?

    我是通过自定义异常,然后从 service 层抛出,在 controller 层进行统一处理。
    但是感觉这样的方式太粗暴了点。

    如果把部分数据判断逻辑放在 controller 层里,因为不在一个事物中可能会有数据不一致(规范要求 controller 层不能加 @Transactional 注释)。
    4 条回复    2018-11-11 11:40:27 +08:00
    Aidenboss
        1
    Aidenboss  
       2018-11-05 10:39:17 +08:00
    确实可以在 service 层抛出异常。
    比如我有一个 用户名为空的 异常。
    @ResponseStatus(code = 500)
    class UsernameEmptyException extends RuntimeException {}
    然后 service 层可以直接抛出。
    然后定义一个全局的 ExceptionHandler,在那里返回结果。controller 就不需要做额外的处理。
    fkdog
        2
    fkdog  
    OP
       2018-11-05 10:43:21 +08:00
    @Aidenboss 那这样的话,可能会定义很多种异常。
    定义单独一个异常,封装 error code 和 error message,全局拦截直接返回错误提示。
    legiorange
        3
    legiorange  
       2018-11-05 13:41:18 +08:00
    spring boot 可以全局拦截,正如 fkdog 所说的那样,我觉得这个自定义是最优解决方案。
    zhazi
        4
    zhazi  
       2018-11-11 11:40:27 +08:00 via Android
    可以封装个容器 类似 resultbean,可预知的业务异常包裹起来,没有异常传递数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5527 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:37 · PVG 14:37 · LAX 22:37 · JFK 01:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.