引言
作为一名Java开发,每天就在和各位异常打交道,有时候代码中处理异常逻辑的部分甚至会超过正常逻辑的代码量,大量的try-catch代码散落在项目代码的各个地方。想象一下,下面哪种代码写起来更让人赏心悦目呢?
第一种:每个接口都try-catch异常
@RestController("exception")
public class ExceptionController {
@Autowired
private UserService userService;
@GetMapping("/get")
public BaseResult<User> getUser(Long id){
if (id == null){
return Result.fail("id不能为空");
}
try {
User user = userService.getUser(id);
return Result.success(user);
} catch (BusinessException e){
// do something
return Result.fail(e.getMessage());
} catch (Exception e){
// do something
return Result.fail(e.getMessage());
} catch (Throwable t){
// do something
return BaseResult.fail(t.getMessage());
}
}
@GetMapping("/getId")
public BaseResult<Long> getId(String userName){
if (StringUtils.isBlank(userName)){
return Result.fail("userName不能为空");
}
try {
Long id = userService.getId(name);
return Result.success(id);
} catch (BusinessException e){
// do something
return Result.fail(e.getMessage());
} catch (Exception e){
// do something
return Result.fail(e.getMessage());
} catch (Throwable t){
// do something
return BaseResult.fail(t.getMessage());
}
}
}
第二种:使用aop统一异常处理
@RestController("exception")
public class ExceptionController {
@Autowired
private UserService userService;
@GetMapping("/get")
@ApiExceptionHandler
public BaseResult<User> getUserName(Long id){
Preconditions.checkArgument(id != null,"id不能为空");
User user = userService.getUser(id);
return BaseResult.success(user);
}
@GetMapping("/getId")
@ApiExceptionHandler
public BaseResult<Long> getId(String userName) {
Preconditions.checkArgument(StringUtils.isNotBlank(name), "userName不能为空");
Long id = userService.getId(userName);