欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 异常,关于业务中异常抛出的使用总结

程序员文章站 2022-07-15 13:04:20
...

Java 异常,关于业务中异常抛出的使用总结

  1. 异常可作为正常的错误状态使用,如"在业务层中,判断到用户不存在,可以直接抛出异常信息,在Web层接口中进行捕获,并返回错误码",这是正确的错误信息返回。这样做的益处是函数中不需要一层一层返回对应的错误原因,占用方法返回值。
  2. 异常可以自定义构造,作用是可以主动捕捉到对应的异常进行处理。如Web层接口,可以自定义一个对应错误码的异常MyException。如果捕获到MyException,则进行对应错误码的接口返回。
    这是正确的异常,是不需要打印堆栈的。但是同时也要捕获意外的异常,这种情况需要打印堆栈进行错误分析。所以自定义异常可以很好的区分开正确异常和意外异常,并进行相应的处理。
  3. 异常可以携带自定义信息
  4. 实例代码如下:

业务层查找用户代码

public class UserService{
    ...
    public User findUser(UserDTO userDTO) throws Exception {
        User user = userManager.getUser(userDTO.getUserId());
        if (user == null){
            //直接抛出自定义异常
            throw new MyException("找不到对应用户");
        }
        ...
    }
}

Web层接口代码

@Controller
@Namespace("/user")
public class UserAction{
    ...
     @Action("findUser")
    public void findUser(){
       ... 
       try{
           ...
           User user = userService.findUser(userDTO);
           ...
           renderState(StateCode.CODE_SUCCESS, "成功");
           
       }catch(MyException e){
           //这是正确的异常,直接返回对应错误码
           renderState(StateCode.CODE_FAILURE, e.getMessage());
           return;
       }catch (Exception e) {
            //这里是捕获意外的异常,需要打印错误信息和堆栈信息,方便错误分析
           logger.error("search user addict state error [{}]",e.getMessage(), e);
           renderState(StateCode.CODE_FAILURE, "server error");
        }
    }
}