Java 异常,关于业务中异常抛出的使用总结
程序员文章站
2022-07-15 13:04:20
...
Java 异常,关于业务中异常抛出的使用总结
- 异常可作为正常的错误状态使用,如"在业务层中,判断到用户不存在,可以直接抛出异常信息,在Web层接口中进行捕获,并返回错误码",这是正确的错误信息返回。这样做的益处是函数中不需要一层一层返回对应的错误原因,占用方法返回值。
- 异常可以自定义构造,作用是可以主动捕捉到对应的异常进行处理。如Web层接口,可以自定义一个对应错误码的异常MyException。如果捕获到MyException,则进行对应错误码的接口返回。
这是正确的异常,是不需要打印堆栈的。但是同时也要捕获意外的异常,这种情况需要打印堆栈进行错误分析。所以自定义异常可以很好的区分开正确异常和意外异常,并进行相应的处理。 - 异常可以携带自定义信息
- 实例代码如下:
业务层查找用户代码
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");
}
}
}