1.常见的异常处理方式
1.1返回码方式
较为方便,但会造成代码耦合的问题
1.2异常
代码耦合较少,下文将重点介绍这种方式。
2.异常处理的步骤
2.1定义业务异常类
你可定义多个异常类,实现不同的业务常见抛出的异常,这里要继承RuntimeException,在controller层中可以不用捕获和处理。
public class UserServiceException extends RuntimeException {
public UserServiceException(String message) {
super(message);
}
}
2.2编写业务层代码,遇到业务进行不下去的时候,抛出异常
@Controller
public class UserController {
@Autowired
private UserService userService;
@PutMapping("{id}")
public SimpleResult updateUser(@PathVariable String id){
//接收数据,调用方法
userService.updateUser(id);
//准备返回的数据
SimpleResult result = new SimpleResult();
result.setResult("00");
result.setResultMsg("成功");
return result;
}
}
@Service
public class UserService {
public String updateUser(String id){
if("123456".equals(id)) {
throw new UserServiceException("该用户不存在");
}
return "aaaa";
}
}
2.3编写顶层的异常处理机制
@ControllerAdvice
public class AppControllerAdvice {
private static final Logger LOGGER = LoggerFactory.getLogger(AppControllerAdvice.class);
@ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(UserServiceException.class)
private SimpleResult handleUserServicrException(UserServiceException userServiceException) {
LOGGER.info(userServiceException.getLocalizedMessage());
//定义异常返回的数据
SimpleResult simpleResult = new SimpleResult();
return simpleResult;
}
}
3.其他注意事项
- 异常处理的效率较低,不建议用于业务逻辑的处理方式,能将业务进行下去的时候,还是建议用逻辑判断的方式处理业务,只有因意外情况,业务无法往下走的时候,才考虑用上文所示的方法